django cookie free sessions可选decorator

django-cookieless的Python项目详细描述


django cookieless

Ed Crewe-2019年5月

概述

这个包为视图提供了一个会话实现和decorator类 允许表单通过发布会话来维护状态而不使用cookies 表单之间或通过URL的ID。

Django需要cookies来维护会话,因此需要授权。

此软件包专为匿名用户会话维护而设计,无需cookies。

警告:这有安全问题,因为无法使用 无会话cookie的csrf保护,与通过url或表单帖子传递的令牌保持单独的令牌。

然而,在公共网站上使用表单的情况下,由于隐私立法的原因,设置cookies是不可取的( ),因为从技术上讲,匿名用户不需要回复表单。 因此,如果使用,可能需要向用户请求设置cookies的权限。

因此,这个包被设计成允许django在不使用cookies的情况下传递多页表单。

为了改善安全隐患,可以在配置中设置允许域的白名单。

也可以将使用限制为特定的URL。

作为另一项安全措施,可以关闭对get请求的处理,这样加密的会话id就不会出现在任何url中。

请注意:不建议在没有上述限制的情况下使用此软件包。

为了同时使用基于cookie和无cookie会话,有一个 保存无Cookieless会话时,自定义无Cookieless_信号(发送方=请求,已创建)和"无Cookie"标志。

两者都适合连接自定义代码来处理这些不太安全的会话。

包提供了一个decorator实用程序,用于关闭特定视图的cookie设置(它还设置csrf_exempt标志)。

该软件包还处理在浏览器中禁用cookies的匿名用户的会话处理情况。

您可以修饰视图以防止它们设置cookie,同时仍保留会话的使用。 通常这是在核心应用程序的url.py中最容易完成的…

从Cookieless.decorators导入无cookie

>>> urlpatterns = patterns('',
...    url(r'^view_function/(\d{1,6})$', no_cookies(view_function)),
...    url(r'^view_class/(\d{1,6})$', no_cookies(ViewClass.as_view())),
...)

请注意,如果许多浏览器选项卡以无Cookieless方式打开到一个站点,它们将各自维护一个完全独立的会话,因为 如果没有cookies,会话将绑定到从访问的页面发布的会话,而不是整个客户端。

如果这不是所需的行为,那么可以通过使用url重写使打开其他windows的链接通过会话来减少这种行为。 当然,这也意味着会话可能也可以在浏览器之间共享。

安装

要安装,请通过pip或其他构建工具添加包,例如bin/pip install django cookieless

然后替换中间件设置中的标准会话:

>>> MIDDLEWARE = (
...    'django.middleware.gzip.GZipMiddleware',
...    'django.middleware.common.CommonMiddleware',
...    'django.middleware.transaction.TransactionMiddleware',
...    # 'django.contrib.sessions.middleware.SessionMiddleware',
...    'cookieless.middleware.CookielessSessionMiddleware',
...)

以下设置控制其行为:

(请参见示例设置文件)

  1. 自动重写响应,而不是使用手动方式<;%session\u token%>;<;%session\u url%>;

无cookieless['rewrite']=真

  1. 重写url以添加无cookies修饰视图的会话id(如果为false,则所有页面导航都必须通过表单发布)

无Cookieless['use_get']=真

  1. 使用客户端IP和用户代理加密会话密钥,添加某种CSRF保护,因为标准CSRF必须在不使用cookies的情况下禁用。

无Cookieless['client_id']=真

  1. 如果填充了此列表,则仅允许白名单中的主机投递到服务器。因此,该站点所服务的任何域都应添加到列表中。但是,如果没有找到referer,则会话被重置,这将在页面重新加载时发生。这有助于防止XSS攻击。

无Cookieless['hosts']=['localhost',]

  1. 更进一步的安全选项是不将基于cookie的会话作为无cookie的会话查找和持久化,因为这些会话可能绑定到用户或其他数据。相反,会创建新的会话来绑定到无Cookieless数据。这降低了无Cookieless允许捕获用户会话的风险,从而降低了权限提升攻击。

无cookieless['no_cookie_persist']=真

  1. 进一步的安全选项,仅保留用于访问特定URL的会话

无cookieless['url_specific']=真

  1. 删除为无cookie修饰的url找到的所有cookie(可以是由其他url设置的cookie)

无Cookieless['删除Cookie']=假

测试

测试套件设置了一个简单的应用程序来手动测试cookies,并对其运行功能测试。

要运行测试,您可能需要从src(或您的分支)安装:

bin/pip安装-e git+https://github.com/edcrewe/django cookieless egg=django cookieless

然后通过:

bin/django-admin.py或manage.py test cookieless.tests–settings=cookieless.tests.settings

(由于pip的问题,包已从命名空间包更改 当它执行nspkg.pth文件时,不安装用于运行测试的"初始化"

无烹饪/装饰.py

因为django测试浏览器有一些特定于会话实现的模拟, 如果直接用它来对付无烹饪,它就不能工作,所以要阻止它破坏其他的测试 无cookieless检查django admin命令是否已使用'test'参数调用并设置settings.testing=true,如果是,则不使用任何cookie装饰。

要覆盖此自动禁用设置,只需将testing=false添加到您的测试设置中。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android首选项相同getPreference()值的不同数据   字符串如何在Java中连接两个列表中的单词   安卓 Java Socket编程:检测客户端和服务器是否连接   使用JTextField的java无法将值转换为int   在java中,如何在不通过超级构造函数设置的情况下将消息设置为自定义异常类   用于标识属性值的java正则表达式模式   Android中的java不可见谷歌地图   java正确取消启动ExecutorService的JavaFX任务   在非活动java类中使用安卓的融合位置提供程序,并在主活动类中获取经度和纬度   spring为什么我的大摇大摆不能用springboot在java中工作?   java JSF(2.2)ViewScope在Weblogic 12.2.1.2和JDK 8上使用Spring 4.3.7(在Mac OS和Docker Oracle Linux环境上)   java如何用一个按钮提高计时器速度   java如何检查字符是否是元音?   注册表引用了不存在的Java运行时环境安装或运行时已损坏错误   来自ResultSet java的mysql getDateTime   maven LanguageTool Java API是否具有“无用”依赖关系?   twitter api身份验证的java Trycatch问题   java在Apache Struts 1.1中是否可以显式白名单?   安卓致命异常:主java。lang.RuntimeException:被问及未知片段