在生产服务器上,我们经常会遭受许多CSRF令牌故障的困扰。该网站的其余部分运行正常,我知道CSRF失败可能是用户方面的错误。但是,例如,今天早上,我们收到了许多新的故障,因此我们想排除任何其他可能性。
今天的失败邮件示例:
{
"GET": {},
"COOKIES": {},
"ERROR": "Referer checking failed - no Referer.",
"USER": "AnonymousUser",
"META": {
"REMOTE_ADDR": "127.0.0.1",
"mod_wsgi.version": "(4, 5, 20)",
"DOCUMENT_ROOT": "/usr/local/apache2/htdocs",
"SERVER_ADDR": "127.0.0.1",
"HTTP_ACCEPT_ENCODING": "gzip, deflate, br",
"wsgi.multithread": "True",
"HTTP_FORWARDED_REQUEST_URI": "/",
"CONTEXT_DOCUMENT_ROOT": "/usr/local/apache2/htdocs",
"wsgi.file_wrapper": "<class 'mod_wsgi.FileWrapper'>",
"mod_wsgi.path_info": "/",
"HTTP_ORIGIN": "chrome-extension://aegnopegbbhjeeiganiajffnalhlkkjb",
(...)
},
"POST": {}
}
尤其是HTTP_ORIGIN看起来“很有趣”:this Chrome extension为什么抓我们/欺凌我们?
从本质上讲:我们是否需要为此担心?
谢谢!
答案 0 :(得分:2)
在“浏览器安全” Chrome扩展程序中,这看起来像是奇怪编码的“功能”。它尝试通过向其发送一个空的POST请求来检查URL是否有效(为什么?!)。
var checkUrlState = function (url) {
var urlState = null;
if (blacklists.indexOf(domainFromUrl((url).toString())) < 0) {
var xhr = new XMLHttpRequest();
try {
xhr.open("POST", url, true);
xhr.timeout = 5000; // time in milliseconds
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
urlState = xhr.status;
} else {
urlState = null;
}
}
xhr.ontimeout = function () {
}
xhr.send();
} catch (e) {
onErrorReceived.call(xhr);
}
}
return urlState;
}
我也在我的网站上看到了这个。我建议根据Origin
标头在前端对其进行过滤。