【问题标题】:Sporadic 403 "CSRF FAILURECSRF cookie not set" errors with djangodjango的零星403“CSRF FAILURECSRF cookie未设置”错误
【发布时间】:2012-08-02 22:52:54
【问题描述】:

我们有一个刚刚开始向外界开放的小型网站。在大多数情况下,它运行良好,但我们偶尔会收到来自其中一种表单的消息“CSRF FAILURECSRF cookie not set”的 403 错误。该表单肯定包含{% csrf_token %},我们的中间件如下所示:

MIDDLEWARE_CLASSES = (
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

该表单对大多数人都适用,但我大约每天都会收到一封包含失败案例的电子邮件。电子邮件包含实际请求,如下所示(我已经删除了其余的 POST 数据以隐藏私有数据,但留下了 csrfmiddlewaretoken):

<WSGIRequest
path:/main/10/apply/,
GET:<QueryDict: {}>,
POST:<QueryDict: {u'csrfmiddlewaretoken': [u'IQQZvbVIggJm6Be6VinPHj8Qn3i3TdmG']}>,
COOKIES:{},
META:{'CONTENT_LENGTH': '111978',
 'CONTENT_TYPE': 'multipart/form-data; boundary=----WebKitFormBoundaryLyo9BPXnAwKnt8ew',
 'CSRF_COOKIE': 'XmSPWJZk2UwS4PNBXRmVlAaYDDdNaGqk',

CSRF_COOKIE 与 csrfmiddlewaretoken 不匹配,我认为这是导致问题的原因,但我无法弄清楚这些提交是如何不同步的,而其他提交则不然。该页面是一个非常简单的表单,只有几个字段。

关于我应该在哪里看的任何建议?我正在通过 apache 使用 mod_wsgi 在 CentOS 上运行最新的 Django 1.4.1。

编辑:与成功的请求相比,唯一看起来奇怪的另一件事是这里的 COOKIES:{} 部分是空的,这让我怀疑他们可能只是在他们的浏览器,但是为什么它会在 META 部分显示 CSRF_COOKIE 呢?

感谢您的帮助!

布兰登

【问题讨论】:

  • 我遇到了同样的问题。你有想过解决办法吗?
  • 有点。问题是某些用户关闭了 cookie,并且无法从服务器端修复它。我们最终关闭了面向公众的表单的 CSRF 保护。不要对登录页面或其他敏感数据执行此操作,但 CSRF 保护并不总是绝对必要的。

标签: django http-status-code-403 django-1.4 django-csrf


【解决方案1】:

HTTP_COOKIE 也是空白吗?

可能是 django 在请求中没有看到 CSRF 令牌 cookie,它正在生成 new CSRF_COOKIE 并将其放入元中。

【讨论】:

    猜你喜欢
    • 2014-03-11
    • 2016-06-22
    • 2021-10-08
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2020-12-05
    • 2013-03-28
    相关资源
    最近更新 更多