以下是丹的回答的一些补充。如果有问题,请纠正我,我自己还是有点困惑。
在继续之前,请阅读Django 中的 CSRF 保护。仔细阅读。您需要将 cookie 中的令牌放入 headerX-CSRFToken
中。如果 cookie 是 Httponly,这将不起作用,也就是说,如果您设置CSRF-COOKIE-HTTPONLY = True
了settings.py
. 然后您必须将 cookie 嵌入到文档中,这当然会产生更多漏洞并减少使用Httponly
.
据我所知,如果 cookie 不是Httponly
,jQuery 会自动设置 X-CSRFToken。如果我错了,请纠正我,但我刚刚花了几个小时玩它,这就是我一直得到的。这让我想知道,Django 文档中的建议有什么意义?它是 jQuery 中的新功能吗?
进一步讨论:
Tastypie 禁用 CSRF 保护,但会话身份验证除外,它在authentication.py
. 您必须同时传递 cookie csrftoken
cookie 和标头X-CSRFToken
才能进行身份验证。(这是 Tastypie 的要求。)假设域相同,浏览器将传递 cookie。除非 csrftoken cookie 是 Httponly,否则 JQuery 将为您传递标头。相反,如果 cookie 是 Httponly,我什至无法在$.ajaxSetup{beforeSend...
. null
如果csrftoken
cookie 是 Httponly ,jQuery 会自动将 X-CSRFToken 设置为。至少我能够将标头 X-CS_RFToken 设置为我想要的,所以我知道我正确地传递了这个值。我正在使用 jQuery 1.10。
If you are using curl
for testing, you have to pass two cookies (sessionid
and csrftoken
), set the headers X-CSRFToken
and, if the protocol is HTTPS, also set the Referrer
.