美文网首页
Flask-关于如何处理csrf_token的理解

Flask-关于如何处理csrf_token的理解

作者: 金鱼座 | 来源:发表于2020-04-30 10:57 被阅读0次

    在我们日常实现flask的form表单提交的功能时, 经常会遇到一个这个比较尴尬的问题,就是关于csrf保护的问题, 由于跟我一样的初学者在学习flask的时候,很多都是直接从网上copy的,俗称代码搬运工,但是由于很多博客的内容良莠不齐,或者缺胳膊短腿的, 所以很多时候我们按照对方的要求写出来的代码却无法成功执行, 其中csrf就是一个案例

    两个Form引入的区别

    针对这个问题,我们首先需要了解两个Form的区别(wtforms or flask_wtf)

    from wtforms import Form
    from flask_wtf import Form, FlaskForm
    

    在个人的使用中,我发现最大的一个区别就是关于CSRF_TOKEN的支持区别,
    从wtforms引入的Form,在我们提交前台form时,是不需要设置csrf相关内容的,它等于是不进行相关保护的form提交

    而从flask_wtf 引入到得Form, 在提交前台form时,必须设置相关csrf_token值,跟form一起提交,否则会报错

    那么对于第二种情况下的设置csrf_token,我们有哪些办法呢?
    第一种,使用CsrfProtect(app)的方式来进行

    # 前端引用csrf_token
     <input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
    # app 加载
    CsrfProtect(app)
    
    # 配置
    SECRET_KEY = ''
    

    第二种, 使用Form自带的渲染功能进行

    # 在前端直接
     {{ form.csrf_token }}
    注意: 该情况下,必须在视图函数去主动声明Form,并将form渲染给前端如下图
    
    image.png

    常见的几个问题

    SECRET_KEY 配置未配置 未注册CsrfProtect, 在加载app时,CsrfProtect(app)

    相关文章

      网友评论

          本文标题:Flask-关于如何处理csrf_token的理解

          本文链接:https://www.haomeiwen.com/subject/aczawhtx.html