作者:tomphilip_399_140 | 来源:互联网 | 2023-09-07 11:41
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
请求?
按照Django docs:
如果[{CSRF_COOKIE_HTTPONLY
]设置为True,则客户端Javascript将无法访问CSRF COOKIE。
将CSRF COOKIE指定为HttpOnly并没有提供任何实际的保护,因为CSRF只是为了防止跨域攻击。如果攻击者可以通过Javascript读取COOKIE,那么就浏览器而言,他们已经在同一个域中,因此他们无论如何都可以做任何自己想做的事情。 (XSS比CSRF大得多。)
只需设置CSRF_COOKIE_HTTPOnLY= False
(或将其从设置中完全删除,因为这是默认设置),您就应该能够从Javascript访问它。