android 如何从移动终端(安卓)应用程序向使用CSRF令牌的培养瓶API发送POST请求?

esbemjvw  于 2023-02-20  发布在  Android
关注(0)|答案(1)|浏览(220)
    • 问题:**

如何将数据从我的安卓应用发布到采用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应用程序?

请给我建议。通常只要我在谷歌上搜索足够多,我就能找到答案,但在这个问题上我卡住了!谢谢!

deyfvvtc

deyfvvtc1#

你在这里提供的信息还不够,但是我在开始学习 flask 的时候也遇到过类似的问题,所以,我想这对你来说也应该是一个类似的案例。
我创建了一个简单的webhook来接受来自另一个应用程序的POST请求。如果我关闭了CSRF,POST请求就可以工作,但是打开了CSRF保护,POST请求就会返回400状态代码。
有一个简单的方法可以使Flask中的任何视图或蓝图免除CSRF保护。我们可以用flask_wtf.csrf. CSRFProtect.exempt装饰器装饰不需要CSRF保护的路由。请看下面的代码。

from flask import Flask, request, make_response, jsonify
from flask_wtf.csrf import CSRFProtect

app = Flask(__name__) # this will take name of the project
csrf = CSRFProtect()
csrf.init_app(app)

@app.route@app.route("/newhook", methods=['GET', 'POST'])
@csrf.exempt #this will exempt the csrf for this view
def newhook():
    if request.method == 'POST':
        alldata = request.get_json()
        resp = alldata['message']
        num = alldata["from"]
        myres = make_response(jsonify(resp, num))
        
        return myres

我还在下面提供了官方flask_wtf CSRF protect文档的链接以供参考。https://flask-wtf.readthedocs.io/en/0.15.x/csrf/#exclude-views-from-protection
希望这有帮助!!

相关问题