gpt4 book ai didi

如果缺少 csrf cookie,Django 1.6 HTTP_X_CSRFTOKEN header 将被忽略

转载 作者:行者123 更新时间:2023-12-02 05:18:44 25 4
gpt4 key购买 nike

我有 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 Coo​​kie 值与 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com