API端点:/api/items/
具有authentication_classes = (SessionAuthentication, )
在我的Vue.js代码中,我有:
getCookie: function (name) {
match = document.cookie.match(new RegExp(name + '=([^;]+)'));
if (match) return match[1];
return
},
...
saveApiCall: function (data) {
this.$http.post("/api/items/", data, { headers: { 'X-CSRFToken': this.getCookie('csrftoken') } }).then(function (response) {
this.close();
}).catch(function (response) {
this.form_errors = response.body;
});
},
但是当我设置以下设置时它不起作用:
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_HTTPONLY = True
在$http.post
安全的情况下如何发送此csrftoken
请求?
答案 0 :(得分:0)
按照Django docs:
如果[{
CSRF_COOKIE_HTTPONLY
]设置为True,则客户端JavaScript将无法访问CSRF cookie。将CSRF cookie指定为HttpOnly并没有提供任何实际的保护,因为CSRF只是为了防止跨域攻击。如果攻击者可以通过JavaScript读取Cookie,那么就浏览器而言,他们已经在同一个域中,因此他们无论如何都可以做任何自己想做的事情。 (XSS比CSRF大得多。)
只需设置CSRF_COOKIE_HTTPONLY = False
(或将其从设置中完全删除,因为这是默认设置),您就应该能够从JavaScript访问它。