无cookie的Django CSRF保护。
项目描述
这是什么?
django-session-csrf 是Django CSRF保护的一种替代实现,不使用cookies。相反,它使用Django的session后端在服务器上维护CSRF令牌。CSRF令牌必须仍然包含在所有POST请求中(在表单中使用csrfmiddlewaretoken或通过X-CSRFTOKEN头)。
安装
从PyPI
pip install django-session-csrf
从github
git clone git://github.com/mozilla/django-session-csrf.git
在您的 TEMPLATE_CONTEXT_PROCESSORS 中将 django.core.context_processors.csrf 替换为 session_csrf.context_processor
TEMPLATE_CONTEXT_PROCESSORS = ( ... 'session_csrf.context_processor', ... )
在您的 MIDDLEWARE_CLASSES 中将 django.middleware.csrf.CsrfViewMiddleware 替换为 session_csrf.CsrfMiddleware 并确保它在AuthenticationMiddleware之后列出
MIDDLEWARE_CLASSES = ( ... 'django.contrib.auth.middleware.AuthenticationMiddleware', ... 'session_csrf.CsrfMiddleware', ... )
然后我们必须对Django进行猴子补丁以修复 @csrf_protect 装饰器
import session_csrf session_csrf.monkeypatch()
确保它在类似您的根 urls.py 的地方,以便在导入视图之前应用补丁。
Django的差异
django-session-csrf 不会为匿名用户分配 CSRF 令牌,因为我们不希望为每个匿名用户都支持一个会话。相反,需要匿名表单的视图可以使用 @anonymous_csrf 进行装饰。
from session_csrf import anonymous_csrf @anonymous_csrf def login(request): ...
anonymous_csrf 使用缓存为匿名用户提供轻量级的会话。它发送一个cookie来唯一标识用户,并将 CSRF 令牌存储在缓存中。可以通过以下设置进行控制:
- ANON_COOKIE
匿名用户cookie使用的名称
默认值: anoncsrf
- ANON_TIMEOUT
用于匿名 CSRF 令牌的缓存超时时间(以秒为单位)
默认值: 60 * 60 * 2 # 2 hours
注意,默认情况下 Django 使用本地内存缓存,这在与多个 Web 服务器线程一起使用时将无法与匿名 CSRF 一起工作。要使用匿名 CSRF,您必须配置一个在 Web 服务器实例之间共享的缓存,例如 Memcached。有关更多信息,请参阅 Django 缓存文档。
如果您只想为登录用户提供 CSRF 保护视图,可以使用 anonymous_csrf_exempt 装饰器。如果匿名视图通过 CAPTCHA 进行保护,这可能很有用。
from session_csrf import anonymous_csrf_exempt @anonymous_csrf_exempt def protected_in_another_way(request): ...
如果您希望所有视图都为匿名用户提供 CSRF 保护,请使用以下设置:
- ANON_ALWAYS
始终为匿名用户提供 CSRF 保护
默认值: False
为什么我想要这个?
您的网站位于一个由其他网站组成的子域名上,这些网站不在您的控制之下,因此 cookie 可能来自任何地方。
您担心攻击者使用 Flash 伪造 HTTP 头部。
您厌倦了要求 Referer 头部。
为什么我不想这样做?
将令牌存储在会话中意味着您需要更频繁地调用会话存储。
为匿名用户提供 CSRF 保护表单需要更多的工作。
项目详情
django-session-csrf-0.7.1.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e17177e6e2e6518ec7ce6693ad10a5c747f8571d09f4cfa9082599334421605d |
|
MD5 | 8eeb5338fd4eb2e2d1813adcabfab511 |
|
BLAKE2b-256 | 8bdc4bdbea0f023011d04851afdf271e0f7b1871efb04c18e1e6eea8cc7dc0f5 |
哈希值 for django_session_csrf-0.7.1-py2.py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ff8c10e30d312c77fc6a6db7710e22b9383e28c03b7fe958876ca96f39aa6cf2 |
|
MD5 | fc58f7403632e1b1cabcc2e09d1a19cc |
|
BLAKE2b-256 | ea454dea5e300c2349012ae3d49a930bf164fba7a9f1a3ef5d026c652ee3eb59 |