javascript - 使用 fetch API 发送 POST 请求时处理 csrf 安全性
问题描述
我正在为 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.');
}
});
}
这已经够直截了当了。
问题是,在view
这个 POST 请求的接收端的服务器端需要一个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();
}
为了避免这种情况,我不得不制作 server-side view csrf_exempt
。我觉得这不是很安全。
所以我想问专家他们将如何处理这种场景的安全方面?
顺便说一句,这里的服务器端开发人员不得不涉足 JS 并且超出了他的深度。为菜鸟问题道歉(如果是的话)。
解决方案
推荐阅读
- angular - Angular6 - 尝试在我的表单中实现嵌套的自定义表单字段时出现问题和错误行为(使用 Angular Material)
- python - Python在文件夹中查找单词并保存新文件
- dart - 删除字符串中的尾部斜杠
- geolocation - 与 Nativescript 地理定位插件作斗争
- java - 我没有变白这个迭代不起作用?
- python - ndarray 大于数组的值的逐行索引
- mysql - 在 where 子句中检查 max( CASE WHEN ) 的值 - 编辑:HAVING CLAUSE
- java - 滚动方法不在android应用程序中执行滚动
- perl - 检查是否通过 perl 脚本安装了 VC++ Redistributable 10
- owin - 使用 Okta 进行身份验证时,GetExternalLoginInfoAsync 始终返回 null