javascript - 使用 React Form、Flask 服务器和 Flask-WTF 进行 CSRF 保护

标签 javascript reactjs flask-wtforms csrf-protection

TL;DR 我需要保护我的表单免受 CSRF 攻击,我想在前端使用 ReactJS,在后端使用 Flask/Flask-WTF。

我正在重构一个使用 Python、Flask 和 Flask-WTF 为表单构建的网站,我想使用 React 作为前端而不是通过 PyPugjs 的 Jinja2。我正在使用 Flask-WTF 来呈现表单,它会处理 CSRF token 等。我知道如何使用 React 制作表单,但如何获得 CSRF 保护?

现在我的表单渲染看起来像这样:(使用 Pug)

mixin render_form(form, id='', action='Submit')
    form(method='POST', action='', id=id)
        =form.csrf_token

        each field in form
            fieldset
                if field.errors
                    each error in field.errors
                        .notification.error
                            #{error}

                #{field(placeholder=field.label.text)}

        button(type='submit') #{action}

最佳答案

当您发布表单时,您需要将 csrf token 作为 header X-CSRFToken 发送。在这里查看他们的文档:http://flask-wtf.readthedocs.io/en/stable/csrf.html#javascript-requests

他们的示例 w/POSTing via jQuery 在发送任何 POST/PUT/DELETE ajax 请求之前设置 X-CSRFToken:

<script type="text/javascript">
    var csrf_token = "{{ csrf_token() }}";

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

根据您使用哪个库将表单 POST 发送回服务器,您设置 header X-CSRFToken 的实现将有所不同。

关于javascript - 使用 React Form、Flask 服务器和 Flask-WTF 进行 CSRF 保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43005644/

相关文章:

javascript - 如果对象在另一个数组中具有匹配值,则 react 更新对象数组

javascript - 恢复无限滚动页面上的滚动位置

javascript - React-redux,连接函数不使用新数据更新状态

python - 如何使用 Flask-Marshmallow 处理文件上传验证?

python - WTForms:在取消时禁用客户端验证

javascript - 将 console.log() 与 Electron 一起使用

javascript - 让 setTimeout 工作

javascript - Bootstrap 导航 float : right doesn't work?

javascript - 为什么 render() 中的这个函数调用会创建无限循环?

javascript - Flask- WTF with knockout.js , JavaScript 和 Ajax