Django CSRF令牌故障风险
在我们的生产服务器上,我们周期性地遭受许多CSRF令牌故障。该网站在其他方面运行良好,我知道CSRF故障可能是用户端错误。然而,例如今天早上我们收到了大量新的故障,因此我们希望排除任何其他可能性 今天的失败邮件示例:Django CSRF令牌故障风险,django,google-chrome-extension,csrf,Django,Google Chrome Extension,Csrf,在我们的生产服务器上,我们周期性地遭受许多CSRF令牌故障。该网站在其他方面运行良好,我知道CSRF故障可能是用户端错误。然而,例如今天早上我们收到了大量新的故障,因此我们希望排除任何其他可能性 今天的失败邮件示例: { "GET": {}, "COOKIES": {}, "ERROR": "Referer checking failed - no Referer.", "USER": "AnonymousUser", "META": { "REMOT
{
"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": {}
}
{
“获取”:{},
“COOKIES”:{},
“错误”:“Referer检查失败-无Referer。”,
“用户”:“匿名用户”,
“元”:{
“远程地址”:“127.0.0.1”,
“mod_wsgi.version”:“(4,5,20)”,
“文档根”:“/usr/local/apache2/htdocs”,
“服务器地址”:“127.0.0.1”,
“HTTP_接受_编码”:“gzip,deflate,br”,
“wsgi.multi-thread”:“True”,
“HTTP_转发的_请求_URI”:“/”,
“上下文文档根”:“/usr/local/apache2/htdocs”,
“wsgi.file_包装器”:“”,
“mod_wsgi.path_info”:“/”,
“HTTP_来源”:“chrome”-extension://aegnopegbbhjeeiganiajffnalhlkkjb",
(...)
},
“职务”:{}
}
尤其是HTTP_的起源看起来很“有趣”:为什么刮/欺负我们
那么本质上:我们需要担心吗
谢谢 这看起来像是“浏览器安全”Chrome扩展中的一个奇怪编码的“功能”。它试图通过向URL发送一个空的POST请求来检查URL是否有效(为什么?!)
var checkUrlState=函数(url){
var urlState=null;
if(blacklists.indexOf(domainFromUrl((url.toString()))<0){
var xhr=new XMLHttpRequest();
试一试{
xhr.open(“POST”,url,true);
xhr.timeout=5000;//以毫秒为单位的时间
xhr.onreadystatechange=函数(){
if(xhr.readyState==4){
urlState=xhr.status;
}否则{
urlState=null;
}
}
xhr.ontimeout=函数(){
}
xhr.send();
}捕获(e){
ONERRORSERved.call(xhr);
}
}
返回状态;
}
我也在我的网站上看到了这一点。我建议在前端根据Origin
标题对其进行过滤
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;
}