我正在为Django / Python网络应用实现网络通知。
其中一项要求是记录目标用户的“接收通知”行为。
要记录此指标,我正在使用fetch API,如下所示:
function log_notif_reception(status_code) {
fetch('/1-on-1/push-notif/received/', {
"method": 'POST',
"headers": {
'Accept': 'application/json',
'Content-Type':'application/json'
},
"credentials": 'include',
"body": JSON.stringify({'status_code':status_code})
})
.then(function(response) {
if (!response.ok) {
throw new Error('Bad status code from server.');
}
});
}
这很简单。
问题在于,此POST请求的接收方在服务器端的view
期望csrf token
来确保它不是Cross-Site Request Forgery
攻击。
但是,在此场景中没有document
对象可以从中提取csrf令牌。收到通知的用户可能无法打开Web应用程序。嗯,我无法执行以下操作:
function get_cookie(name) {
if (!name) { return null; }
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length >= 2) return parts.pop().split(";").shift();
}
为避免这种情况,我不得不制作服务器端视图csrf_exempt
。我觉得这不是很安全。
所以我想问一下专家,他们将如何处理这种情况的安全性?
顺便说一句,这里的服务器端开发人员不得不涉足JS,而且还不了解他。对于菜鸟问题(如果有的话)表示歉意。