Flask CSRF防护报错‘The referrer does not match the host’的原因排查及解决咨询
Flask CSRF防护报错‘The referrer does not match the host’的原因排查及解决咨询
我们团队在Flask框架上运行Python应用,按照官方指导给所有POST表单都配置了CSRF令牌,但只要通过代理服务器访问,就一直弹出400 Bad Request: The referrer does not match the host的错误;但绕过代理直接访问时,CSRF令牌就能正常工作,完全没问题。
我们特意调试了Flask的csrf.py模块,找到了问题的核心差异:
- 走代理服务器时,系统判定的「合法来源(Good referrer)」是一个IP地址,而实际的「请求来源(Request referrer)」是完整的域名URL
- 绕过代理时,这两个来源完全匹配,都是完整的域名
另外我们确认了这个代理服务器并没有连接域名服务器,我实在想不通它是怎么把完整域名转换成IP地址的……
现在的问题是,自从启用CSRF防护后,我们很多应用在走代理的环境下都因为这个报错无法正常运行。有没有大佬能解释下这个域名转IP的机制?或者给我们一些解决思路、临时的 workaround 也行,万分感谢!
备注:内容来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

