- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 AJAX 代码,它向 Django 1.6.4 应用程序发出 POST 请求。该 View 通过 django.middleware.csrf.CsrfViewMiddleware 启用了 CSRF 保护。如果我不传递 cookie 但传递 HTTP_X_CSRFTOKEN,则会失败。
我正在查看 django.middleware.csrf.CsrfViewMiddleware 的代码,我看到在第 161 行,它在获取后检查是否 if csrf_token is None:
它来自cookie。如果为 None,则返回。仅此后,它才会检查 csrfmiddlewaretoken
参数和 HTTP_X_CSRFTOKEN
请求 header 。这看起来不正确,并且只有在检查所有可能的位置以查找可以找到该值的位置后,才应检查是否缺少 csrf_token 值。
还有人遇到类似问题吗?我是不是看错了?
最佳答案
我认为令人困惑的可能是 CSRF cookie 和 HTTP_X_CSRFTOKEN
HTTP header 存在于比较的两侧。换句话说,为了防止CSRF攻击,Django进行了比较:
CSRF cookie 值与 POST token 值(“csrfmiddlewaretoken”)
(或)
CSRF Cookie 值与 HTTP header 值(“HTTP_X_CSRFTOKEN”)
这就是为什么 cookie始终是必需的。使用HTTP_X_CSRFTOKEN
header 是在 POST 数据中设置 token 的替代品,而不是 cookie 的替代品。
关于如果缺少 csrf cookie,Django 1.6 HTTP_X_CSRFTOKEN header 将被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24780674/
我有 AJAX 代码,它向 Django 1.6.4 应用程序发出 POST 请求。该 View 通过 django.middleware.csrf.CsrfViewMiddleware 启用了 CS
我是一名优秀的程序员,十分优秀!