Django-如何禁用Referer检查
我在nginx后面放了一个基于Django的web项目(clouderahue:),用于负载平衡和SSL卸载 卡在403错误和CSRF错误上。 日志文件包含 下午5:32:32警告访问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中已经有以下内容
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
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,因此它们是相同的