Django 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

在我们的生产服务器上,我们周期性地遭受许多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": {}
}
{
“获取”:{},
“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;
}