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-CSRFTokenHeader中。但是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

posted @ 2022-01-25 10:30  巴蜀秀才  阅读(420)  评论(0编辑  收藏  举报