flask中使用 flask-wtf 模块开启CSRF保护的方法如下:
后端设置
from flask import Flask from flask_wtf.csrf import CSRFProtect app = Flask(__name__) # 使用防csrf保护APP csrf = CSRFProtect(app)
前端设置
在头部或底部增加下列代码:
<!-- 如果开启csrf保护,需要在html页面中的head中定义如下代码 --> <meta name="csrf-token" content="{{ csrf_token() }}">
在js中增加下列代码
var csrftoken = $('meta[name=csrf-token]').attr('content')
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type)) {
xhr.setRequestHeader("X-CSRFToken", csrftoken)
}
}
})
取消保护
开启CSRF后,如果指定接口要取消保护,可以使用如下装饰器
@csrf.exempt # 取消csrf保护 @app.route("/del", methods=["POST"]) def delete(): pass