- 问题:**
如何将数据从我的安卓应用发布到采用CSRF保护的flask web应用?
- 背景:**我使用Flask构建了一个网站,并通过全局部署CSRFProtect()(来自Flask-WTForms包)来保护它免受CSRF攻击。
我正在建立一个手机应用程序,将允许用户自动发送数据到他们的帐户上的 flask 数据库每天。
我可以使用Android应用的GET请求成功访问Flask API,但无法从Android应用成功发送POST请求,除非我关闭Flask API中的全局CSRF保护。
- 目前为止我的想法是:**选项一-如果请求来自应用程序,则关闭CSRF保护。通过阅读我了解到CSRF攻击需要Cookie,而Cookie只能由浏览器生成,因此如果我的请求来自我的应用程序,则我可以安全地免受CSRF攻击,并可以关闭特定URL的CSRF保护。但是,如果任何人发现此URL,则他们都可以访问它,因此如果请求来自浏览器,我需要保持CSRF保护,如果来自我的Android应用程序,则将其关闭。这可能吗?
- 选项二**-在我的安卓应用程序上获取CSRF令牌。我认为将令牌编码到我的应用程序中并不安全,因为任何人都可以下载应用程序并可能访问代码(对吗?).如果这是真的,那么我将需要以某种方式获得令牌从 flask 通过身份验证过程与 flask 应用程序.但是,如果CSRF保护阻止了我的POST请求,我如何将表单数据发送到flask应用程序?
请给我建议。通常只要我在谷歌上搜索足够多,我就能找到答案,但在这个问题上我卡住了!谢谢!
1条答案
按热度按时间deyfvvtc1#
你在这里提供的信息还不够,但是我在开始学习 flask 的时候也遇到过类似的问题,所以,我想这对你来说也应该是一个类似的案例。
我创建了一个简单的webhook来接受来自另一个应用程序的POST请求。如果我关闭了CSRF,POST请求就可以工作,但是打开了CSRF保护,POST请求就会返回400状态代码。
有一个简单的方法可以使Flask中的任何视图或蓝图免除CSRF保护。我们可以用flask_wtf.csrf. CSRFProtect.exempt装饰器装饰不需要CSRF保护的路由。请看下面的代码。
我还在下面提供了官方flask_wtf CSRF protect文档的链接以供参考。https://flask-wtf.readthedocs.io/en/0.15.x/csrf/#exclude-views-from-protection
希望这有帮助!!