【问题标题】:CSRF verfication failed, but only with IE9CSRF 验证失败,但仅限 IE9
【发布时间】:2011-11-18 12:07:22
【问题描述】:

我已经按照Django docs 中的描述设置了 CSRF(使用 Django 1.3)。它适用于 FF 和 Safari,但在 IE9 上我得到了

<div id="summary">
<h1>Forbidden <span>(403)</span></h1>
<p>CSRF verification failed. Request aborted.</p>
</div>

在我找到的 Ajax 请求的响应标头中

Set-Cookie  csrftoken=8db3637951243ffb591e6b2d6998ed03; expires=Fri, 14-Sep-2012 08:01:52 GMT; Max-Age=31449600; Path=/

当在普通表单中使用它时,它可以在 IE9 中工作(即不涉及 Ajax)。

我在 nginx/1.1.2 后面使用 Django。

任何提示我在这里缺少什么?

【问题讨论】:

    标签: django csrf django-csrf


    【解决方案1】:

    如果您的表单位于 iframe 中,可能的原因是 IE 阻止第三方 cookie 的默认策略。你可以

    Django 的票#17157 建议在文档中添加关于此问题的注释。

    【讨论】:

      【解决方案2】:

      我有同样的问题,对我来说问题是我没有指定表单动作属性。 IE 显然不允许这样做。

      【讨论】:

        【解决方案3】:

        在 Django 的票 #17157(感谢 @akaihola 的链接)中指出,问题在于 Internet Explorer 默认会阻止第三方 cookie。因此,您可以在浏览器设置中为所有站点或仅为您的站点启用第三方 cookie。 以下是如何在 IE 7 中执行此操作(来自 this link):

        1. 点击“工具”菜单
        2. 点击“Internet 选项”
        3. 选择“隐私”标签

        选项 1:为所有网站启用第三方 cookie

        1. 点击“高级”
        2. 选择“覆盖自动 cookie 处理”
        3. 选择“Third-party Cookies”下的“Accept”按钮并点击“OK”

        选项 2:仅为 Feedjit.com 启用第三方 cookie

        1. 点击“网站”
        2. 添加“your-domain.com”并点击“允许”
        3. 点击“确定”
        4. 选择“Third-party Cookies”下的“Accept”按钮并点击“OK”

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-09
          • 2015-10-15
          • 2012-09-08
          • 2015-06-02
          • 1970-01-01
          相关资源
          最近更新 更多