我正在使用django rest框架。我有Ember前端。在这里,当我从Cookies.get(" csrftoken")获取csrftoken时,它与我在浏览器cookie中看到的csrftoken不同。
以下是截图:
看到Cookie中的csrftoken与X-CSRFToken(由Cookies.get(" csrftoken")设置)不同。
为什么他们不一样?我需要他们俩都一样。请帮忙。
答案 0 :(得分:0)
您应该在发送请求之前手动设置X-CSRFToken
。 Django文档包含了很好的例子:
https://docs.djangoproject.com/en/1.9/ref/csrf/#ajax
关于JQuery,但你应该抓住这个想法:
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
想法如下:服务器在cookie中发送您的csrf-token,您的客户端读取cookie并在标头中设置令牌。服务器读取请求标头,请参阅好X-CSRFToken
并知道该请求有效。
答案 1 :(得分:0)
在django 1.10中。为了防止BREACH攻击,CSRF保护机制现在在每个请求上更改表单标记值(同时保留可用于验证不同标记的不变秘密)。 也许你的Django版本是1.10 docs