Django CSRF令牌失败风险

时间:2018-06-24 15:08:00

标签: django google-chrome-extension csrf

在生产服务器上,我们经常会遭受许多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为什么抓我们/欺凌我们?

从本质上讲:我们是否需要为此担心?

谢谢!

1 个答案:

答案 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标头在前端对其进行过滤。