帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:Protection  CSRF  Csrf Protection  Protect  Cookies  CSR  cookie  
CSRF protection for Django without cookies.

  • 源代码名称:django-session-csrf
  • 源代码网址:http://www.github.com/mozilla/django-session-csrf
  • django-session-csrf源代码文档
  • django-session-csrf源代码下载
  • Git URL:
    git://www.github.com/mozilla/django-session-csrf.git
  • Git Clone代码到本地:
    git clone http://www.github.com/mozilla/django-session-csrf
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/mozilla/django-session-csrf
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • 这是什么?

    django-session-csrf 是不使用 Cookies的Django 保护的另一个实现。 相反,它使用 Django 后端会话在服务器上维护CSRF令牌。 csrf令牌仍然必须包含在所有POST请求( 在表单中使用 csrfmiddlewaretoken,或者使用x csrftoken头) 中。

    安装

    从 PyPI:

    pip install django-session-csrf

    来自 github:

    git clone git://github.com/mozilla/django-session-csrf.git

    替换 django.core.context_processors.csrf 在你的TEMPLATE_CONTEXT_PROCESSORS 中使用 session_csrf.context_processor:

    TEMPLATE_CONTEXT_PROCESSORS = (
    . . .
     'session_csrf.context_processor',
    . . .
    )

    替换 django.middleware.csrf.CsrfViewMiddlewareMIDDLEWARE_CLASSES 中使用 session_csrf.CsrfMiddleware,并确保它在AuthenticationMiddleware之后列出:

    MIDDLEWARE_CLASSES = (
    . . .
     'django.contrib.auth.middleware.AuthenticationMiddleware',
    . . .
     'session_csrf.CsrfMiddleware',
    . . .
    )

    然后,我们必须 monkeypatch Django 来修复 @csrf_protect decorator:

    import session_csrf
    session_csrf.monkeypatch()

    确保在类似你的root urls.py的情况下,在导入视图之前应用补丁。

    与之间的差异

    由于我们不想为每个匿名用户支持会话,django-session-csrf 不会给匿名用户指派CSRF令牌。 相反,需要匿名表单的视图可以使用 @anonymous_csrf 进行修饰:

    from session_csrf import anonymous_csrf
    @anonymous_csrf
    def login(request):
    . . .

    anonymous_csrf 使用缓存给匿名用户一个轻量级会话。 它发送一个cookie来惟一标识用户并在缓存中存储CSRF令牌。 它可以通过以下设置来控制:

    ANON_COOKIE

    用于用户匿名cookie的NAME

    默认值:anoncsrf

    ANON_TIMEOUT

    用于匿名CSRF令牌的缓存超时( 以秒为单位)

    默认值: 60 * 60 * 2 # 2 hours

    注意,默认情况下,Django 使用本地内存缓存,如果有多个web服务器线程,它将不能使用匿名。 使用匿名 CSRF,必须配置在web服务器实例之间共享的缓存,例如 Memcached。 有关详细信息,请参阅 Django 缓存文档

    如果你只希望视图对登录用户具有CSRF保护,则可以使用 anonymous_csrf_exempt decorator。 如果匿名视图通过CAPTCHA是 protected,这可能很有用,例如。

    from session_csrf import anonymous_csrf_exempt
    @anonymous_csrf_exempt
    def protected_in_another_way(request):
    . . .

    如果你希望所有视图都像 Django 那样对匿名用户具有CSRF保护,请使用以下设置:

    ANON_ALWAYS

    始终为匿名用户提供CSRF保护

    默认值:false

    我为什么要这样做?

    • 你的站点位于与它的他控件不在你的控件之下的站点上,因这里 Cookies 可以从任何地方来。
    • 你担心使用 Flash 来伪造HTTP头的攻击者。
    • 你已经厌倦了需要引用邮件头。

    我。我为什么不想要?

    • 在会话中存储令牌意味着你必须更频繁地访问会话存储。
    • 它对csrf保护匿名用户的表单有一点工作。


    文章标签:Protect  cookie  Cookies  Protection  CSRF  CSR  Csrf Protection  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语