python框架------Flask基础教程--6.3 CSRF保护
CSRF保护
在flask
的表单中,默认是开启了csrf
保护功能的,如果你想关闭表单的csrf
保护,可以在初始化表单的时候传递csrf_enabled=False
进去来关闭csrf
保护。如果你想关闭这种默认的行为。如果你想在没有表单存在的请求视图函数中也添加csrf
保护,可以开启全局的csrf
保护功能:
csrf = CsrfProtect()
csrf.init_app(app)
或者是针对某一个视图函数,使用csrf.protect
装饰器来开启csrf
保护功能。并且如果已经开启了全局的csrf
保护,想要关闭某个视图函数的csrf
保护功能,可以使用csrf.exempt
装饰器来取消本视图函数的保护功能。
AJAX的CSRF保护
在AJAX
中要使用csrf
保护,则必须手动的添加X-CSRFToken
到Header
中。但是CSRF
从哪里来,还是需要通过模板给渲染,而Flask
比较推荐的方式是在meta
标签中渲染csrf
,如下:
<meta name="csrf-token" content="{{ csrf_token() }}">
如果要发送AJAX
请求,则在发送之前要添加CSRF
,代码如下(使用了jQuery):
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)
}
}
})
CSRF示意图
CSRF解释参考:https://blog.csdn.net/weixin_40482816/article/details/114301717
清澈的爱,只为中国