【问题标题】:Django CSRF for both HTTP and HTTPS用于 HTTP 和 HTTPS 的 Django CSRF
【发布时间】:2011-08-09 01:32:35
【问题描述】:

我有一个在 HTTP 和 HTTPS 之后运行的博客,并且遇到了 csrf 令牌验证问题。

CSRF 令牌应以每种形式提供,但当我在网站的 HTTP 版本上并尝试提交评论时,我收到以下错误。

禁止 (403) CSRF 验证失败。请求中止。

Referer 检查失败 - http://mysite.com/blog/1/https://mysite.com/ 不匹配。

通过 HTTPS 查看博客时它工作正常。

有人知道如何让验证同时匹配两者吗?

【问题讨论】:

    标签: django https csrf django-csrf


    【解决方案1】:

    您可能需要检查您的设置,看看您是否将 CSRF_COOKIE_SECURE 参数设置为 True

    这会将 cookie 标记为安全并防止浏览器通过非安全连接(即 HTTP)接受它。

    要检查这是否是问题的根源,您可以使用任何有效的视图并放入断言 False 以获取调试屏幕并查看是否发送了 Csrf cookie。

    【讨论】:

    • 感谢您的帮助!我确实认为是这样,但它实际上与我在上面发布的使用我的 fastcgi 参数设置的环境变量有关。
    【解决方案2】:

    我想通了。这是我的 fastcgi 参数的问题

    fastcgi_param HTTPS 开启;

    设置需要开启 HTTPS 的环境变量。当这个变量打开时,Django 对 csrf 令牌做了一些额外的强制。

    【讨论】:

    • 您在哪个网络服务器下运行您的网站?我有同样的问题,在 lighttpd 下运行,目前无法解决。
    • 你是怎么解决的?您是否删除了 fastcgi_param? request.is_secure() 没有它就无法正常工作......
    猜你喜欢
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 2016-09-10
    • 2019-01-13
    相关资源
    最近更新 更多