Django-如何禁用Referer检查

Django-如何禁用Referer检查,django,nginx,nginx-reverse-proxy,nginx-config,Django,Nginx,Nginx Reverse Proxy,Nginx Config,我在nginx后面放了一个基于Django的web项目(clouderahue:),用于负载平衡和SSL卸载 卡在403错误和CSRF错误上。 日志文件包含 下午5:32:32警告访问 10.170.3.21-anon--“POST/accounts/login/HTTP/1.1”--参考者检查失败- 不 匹配 有没有办法在Django项目中禁用Referer检查? Referer检查不会添加任何安全性,因为http头中的Referer很容易被欺骗 我在nginx.conf中已经有以下内容

我在nginx后面放了一个基于Django的web项目(clouderahue:),用于负载平衡和SSL卸载

卡在403错误和CSRF错误上。 日志文件包含

下午5:32:32警告访问
10.170.3.21-anon--“POST/accounts/login/HTTP/1.1”--参考者检查失败- 不 匹配

有没有办法在Django项目中禁用Referer检查?

Referer检查不会添加任何安全性,因为http头中的Referer很容易被欺骗

我在nginx.conf中已经有以下内容

  proxy_set_header        Host $host;

  proxy_set_header        X-Real-IP $remote_addr;
  proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header        X-Forwarded-Proto $scheme;

  proxy_set_header        X-Forwarded-Host $host:$server_port;
  proxy_set_header        X-Forwarded-Server $host;
并尝试了以下有关Referer http属性的更改:

  • proxy\u pass\u header Referer
  • proxy\u hide\u header Referer
  • proxy\u set\u头$http\u referer
  • 所有这些选项都会在Django/Hue后端中产生相同的CSRF/Referer检查错误

    同样,对我来说,在Django中禁用Referer check会更容易

    如果不可能,那么问题可能在Django代码中:

    referer
    变量有一个urlparse对象(请参阅),它包含带有
    端口的“netloc”属性

    再次注意错误-
    netloc
    s不匹配,因为一个有端口(443),另一个没有端口(443端口是https的默认端口):

    Referer检查失败-


    不匹配

    因此,我想应该是在nginx config中进行某种
    Referer
    字段转换,以明确地剪切
    443
    端口(或添加它)

    也在这里发布了Django bug- 但我猜在Django还是会有一个检查do disable Referer check,或者
    通过nginx配置,至少编辑参考文件以剪切/添加https端口443?

    您看到的
    https://hue-dev.discover.abc.com:443/
    因为nginx配置中有以下行:

    proxy_set_header        X-Forwarded-Host $host:$server_port;
    
    您的配置中已经有
    X-Forwarded-Proto$scheme
    来指定协议,因此使用
    X-Forwarded-Host$Host
    应该是安全的。这会解决你的问题

    如果忽略上述内容,另一个选项是在django设置中将
    hue-dev.discover.abc.com:443
    添加到
    CSRF\u TRUSTED\u ORIGINS


    至于您最初的问题,在您的情况下,没有办法禁用django的referer检查。请参阅。

    通过在URL中嵌入端口443设置静态引用,我找到了解决此问题的方法

    proxy\u set\u header Refererhttps://hue-dev.discover.abc.com:443/;

    虽然我更喜欢@nebuler的答案

    仍然希望这个bug可以在Django中修复。 他们的推荐人检查认为
    https://www.com
    https://www.com:443
    这些东西太不一样了
    https
    具有默认端口443,因此它们是相同的