hand
25
_1_1_41
4
python3.X - Web - Flask1.1.1
共46篇
python3.X - Web - Flask1.1.1
返回栏目
0k
0.3k
1k
6k
0.6k
0.8k
0.3k
0.1k
0.2k
0.8k
0.6k
0.6k
0.1k
0.5k
0.2k
2k
0.3k
5k
2k
2k
1k
0.3k
1k
0.1k
1k
1k
0.5k
2k
2k
0.7k
1k
2k
0.1k
1k
0.1k
2k
2k
0.9k
5k
4k
1k
1k
3k
1k
0k
0k
返回python3.X - Web - Flask1.1.1栏目
作者:
贺及楼
成为作者
更新日期:2022-05-14 16:32:20
用户登录受信任的网址A,在本地生成了Cookie
在Cookie没有失效的情况下去访问了危险网站B
B可能会盗用你的身份,以你的名义去发送恶意请求,邮件,盗取你的账号,设置购买商品,造成你个人隐私泄露,造成财产安全。
步骤
在客户端向后端请求界面数据的时候,后端会往响应中的 cookie 中设置 csrf_token 的值
在 Form 表单中添加一个隐藏的的字段,值也是 csrf_token
在用户点击提交的时候,会带上这两个值向后台发起请求
后端接受到请求,以会以下几件事件:
从 cookie中取出 csrf_token
从 表单数据中取出来隐藏的 csrf_token 的值
进行对比
如果比较之后两值一样,那么代表是正常的请求,如果没取到或者比较不一样,代表不是正常的请求,不执行下一步操作
旧:
from flask_wtf.csrf import CsrfProtect
csrf = CsrfProtect()
def create_app():
app = Flask(__name__)
csrf.init_app(app)
新:
from flask_wtf.csrf import CSRFProtect
csrf = CSRFProtect(app)
def create_app():
app = Flask(__name__)
csrf.init_app(app)
为了能够让所有的视图受到CSRF保护,需要扩展 CsrfProtect模块
需要为CSRF保护设置一个密钥,但通常情况下,和Flask应用的SECRET_KEY是一样的。
有的教程会导入CsrfProtect,flask1.0会淘汰掉
现在要导入CSRFProtect
from app import csrf
蓝图引入
@csrf.error_handler
def csrf_error(reason):
return render_template('csrf_error.html', reason=reason), 400
没有通过csrf验证会返回400
from flask_wtf.csrf import CSRFError
BP = Blueprint('BP',__name__)
@BP.errorhandler(CSRFError)
def csrf_error(reason):
return "重新登录或刷新"
@csrf.exempt
@app.route('/foo', methods=('GET', 'POST'))
def my_handler():
exempt 豁免
如果你设置的模板中存在表单,你只需要在表单中添加如下
<form method="post" action="/">
{{ form.csrf_token }}
</form>
如果没有模板中没有表单,你仍然需要一个 CSRF 令牌:
<form method="post" action="/">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
python3.X - Web - Flask1.1.1
整章节共46节
快分享给你的小伙伴吧 ~