CSRF验证失败,但仅限于IE9

发布于 2024-12-04 15:29:14 字数 620 浏览 1 评论 0 原文

我已经按照 Django 文档 中所述设置了 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=/

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

我在 nginx/1.1.2 后面使用 Django。

我在这里缺少什么提示吗?

I have set up CSRF as described in the Django docs (using Django 1.3). It works with FF and Safari, but on IE9 I get

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

In the response headers of the Ajax request I find

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

It works in IE9 when using it in a normal Form (i.e. no Ajax involved).

I am using Django behind nginx/1.1.2.

Any hints what I am missing here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

微凉徒眸意 2024-12-11 15:29:14

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

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

If your form is inside an iframe, the probable reason is IE's default policy of blocking third-party cookies. You could

Django's ticket #17157 proposes to add a note about this issue in the documentation.

沉溺在你眼里的海 2024-12-11 15:29:14

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

I had the same problem, the problem for me was that I did not specify the form action attribute. IE apparantly doesn't allow that.

风柔一江水 2024-12-11 15:29:14

在 Django 的票证 #17157 (感谢 @akaihola 提供的链接)中,指出问题在于 Internet默认情况下,资源管理器会阻止第三方 cookie。因此,您可以在浏览器设置中为所有网站或仅为您的网站启用第三方 Cookie。
以下是在 IE 7 中执行此操作的方法(来自此链接):

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

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

  1. 单击“高级”
  2. 选择“覆盖自动 cookie 处理”
  3. 选择下面的“接受”按钮“第三方 Cookie”并单击“确定”

选项 2:要仅为 Feedjit.com 启用第三方 Cookie,

  1. 请单击“站点”
  2. 添加“your-domain.com”并单击“允许”
  3. 单击“确定”
  4. 选择“第三方 Cookie”下的“接受”按钮,然后单击“确定”

In Django's ticket #17157 (thanks @akaihola for the link) it's stated that the problem is that Internet Explorer blocks third-party cookies by default. So you can enable third-party cookies for all sites or only for your site in browser settings.
Here is how to do that in IE 7 (from this link):

  1. Click the "Tools" menu
  2. Click "Internet Options"
  3. Select the "Privacy" tab

Option 1: To enable third-party cookies for all sites

  1. Click "Advanced"
  2. Select "Override automatic cookie handling"
  3. Select the "Accept" button under "Third-party Cookies" and click "OK"

OR

Option 2: To enable third-party cookies just for Feedjit.com

  1. Click "Sites"
  2. Add "your-domain.com" and click "Allow"
  3. Click "OK"
  4. Select the "Accept" button under "Third-party Cookies" and click "OK"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文