gpt4 book ai didi

python - 如何通过 AJAX 使用 Flask-WTForms CSRF 保护?

转载 作者:太空狗 更新时间:2023-10-29 19:37:24 25 4
gpt4 key购买 nike

Flask-WTForms 提供 CSRF 保护。它在使用普通 HTML 表单时效果很好,但在使用 AJAX 时过程不太清楚。我的表单中有一个文件上传,我使用 AJAX 将这个过程分成两部分:文件转到 upload 端点,而表单的其余部分转到 submit端点。由于该文件是使用 AJAX 发布的,因此它没有获得 CSRF token ,但我想保护 upload 端点免受攻击。使用 AJAX 时如何生成 CSRF token ?

@app.route('/submit', methods=["GET","POST"])
@login_required
def submit():
form = MyForm()

if request.method == "POST" and form.validate():
# success, csrf checks out and data is validated
# do stuff

csrf_for_uploads = # generate csrf?
return render_template('some_form.html', form=form, csrf_for_uploads=csrf_for_uploads)

@app.route('/upload', methods=["POST"])
@login_required
def upload():
myfile = request.files['file']
# How do I verify CSRF now?

最佳答案

documentation谈到了关于 AJAX 实现 CSRF 保护。

您可以启用该模块:

from flask_wtf.csrf import CsrfProtect

CsrfProtect(app)

然后在您的 AJAX POST 调用中使用它:

<meta name="csrf-token" content="{{ csrf_token() }}">

var csrftoken = $('meta[name=csrf-token]').attr('content')

$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken)
}
}
})

希望这对您有所帮助!

关于python - 如何通过 AJAX 使用 Flask-WTForms CSRF 保护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31888316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com