带有蓝图子域的烧瓶WTF-缺少CSRF

时间:2019-01-23 14:05:15

标签: python nginx flask flask-wtforms

flask-wtf和csrf令牌存在很大的问题:

我用python3 / flask开发了一个相当大的Web应用程序。 flask开发服务器的本地设置运行良好。我在云服务器(Ubuntu 18.04)上进行了以下设置:

我正在运行Nginx和Gunicorn。

某些蓝图在某些特定子域上路由。主域名和其他一些子域(例如,mydomain.com和www.mydomain.com)通过一些A记录路由到另一台使用wordpress运行Apache的服务器。我严格要将这两个部分分开。

不过,要解决此问题,我已将flask应用程序的SERVER_NAME配置设置为“ mydomain.com”,并且仅使用蓝图(settings.mydomain.com,designer.mydomain.com和api.mydomain.com)提供的路由。 )。 Nginx仅将那些子域代理到flask。从理论上讲,这很完美,但是有一个扩展让我很烦:flask-wtf

出于安全原因,我在烧瓶启动时随机设置了SECRET_KEY(secrets.token_hex(16))。现在,我可以在表单模板中使用form.hidden_​​tag()来使用csrf令牌。但是每次我现在要提交表单时,由于无效的csrf令牌,该表单均无效。根据我的研究(https://nickjanetakis.com/blog/fix-missing-csrf-token-issues-with-flask),这是由于SERVER_NAME变量的设置。我既没有设法停用csrf(甚至不建议这样做?),也没有针对子域的可靠解决方法。

请帮助,我现在不知道该怎么办,因为我确实需要flask应用程序仅在不同的子域上运行,但是我也需要我的客户进行注册和登录^^

有建议的解决方法吗?我在互联网上找不到任何解决方案。

0 个答案:

没有答案