使用FlaskForm处理请求的任何视图函数都已经获得了CSRF保护。如果有些视图函数还在使用FlaskForm或AJAX请求,请尽快使用FlaskForm提供的CSRF扩展来保护它们。

导入

想要为Flask应用程序启用全局CSRF保护,请注册CSRFProtect扩展。

from flask_wtf.csrf import CSRFProtect

csrf = CSRFProtect(app)

像其他Flask扩展一样,您可以傻瓜地应用它:

csrf = CSRFProtect()

def create_app():
app = Flask(__name__)
csrf.init_app(app)

注意

CSRF保护需要一个秘密密钥来安全地签署令牌。 默认情况下,这将使用Flask应用程序的SECRET_KEY。 如果要使用单独的令牌,可以设置WTF_CSRF_SECRET_KEY。

HTML Forms

当使用FlaskForm时,可以像正常平时一样渲染表单的CSRF字段。

<form method="post">
{{ form.csrf_token }}
</form>

如果模板不使用FlaskForm,则设置input表单中的type为hidden。

<form method="post">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
</form>

JavaScript 请求

发送AJAX请求时,将X-CSRFToken头添加到请求中。例如在jQuery中,您可以配置发送的token给所有请求。

<script type="text/javascript">
var csrf_token = "{{ csrf_token() }}"; $.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrf_token);
}
}
});
</script>

自定义错误响应

当CSRF验证失败时,会引发CSRFError。 默认情况下,这将返回一个带有失败原因的响应和一个400代码。 您可以使用Flask的errorhandler()自定义错误响应。

from flask_wtf.csrf import CSRFError

@app.errorhandler(CSRFError)
def handle_csrf_error(e):
return render_template('csrf_error.html', reason=e.description), 400

视图保护过滤¶

我们强烈建议您使用CSRF保护您的所有观点。 但是如果确实需要,您可以使用装饰器过滤掉某些视图.

@app.route('/foo', methods=('GET', 'POST'))
@csrf.exempt
def my_handler():
# ...
return 'ok'

您可以过滤掉蓝图的所有视图。

csrf.exempt(account_blueprint)

默认情况下,通过将WTF_CSRF_CHECK_DEFAULT设置为False,可以在所有视图中禁用CSRF保护,只有在需要时才选择性地调用protect()。这也使您能够在检查CSRF token之前对请求进行一些预处理。

@app.before_request
def check_csrf():
if not is_oauth(request):
csrf.protect()

Flask-WTF CSRF 保护P3的更多相关文章

  1. Flask-WTF中的csrf保护

    CSRF 保护 这部分文档介绍了 CSRF 保护. 为什么需要 CSRF? Flask-WTF 表单保护你免受 CSRF 威胁,你不需要有任何担心.尽管如此,如果你有不包含表单的视图,那么它们仍需要保 ...

  2. Flask - WTF和WTForms创建表单

    目录 Flask - WTF和WTForms创建表单 一. Flask-WTF 1.创建基础表单 2.CSRF保护 3.验证表单 4.文件上传 5.验证码 二. WTForms 1. field字段 ...

  3. flask_wtf flask 的 CSRF 源代码初研究

    因为要搞一个基于flask的前后端分离的个人网站,所以需要研究下flask的csrf防护原理. 用的扩展是flask_wtf,也算是比较官方的扩展库了. 先上相关源代码: def validate_c ...

  4. HTTP层 —— CSRF保护

    简介 跨站请求伪造是一种通过伪装授权用户的请求来利用授信网站的恶意漏洞.Laravel 使得防止应用遭到跨站请求伪造攻击变得简单. Laravel 自动为每一个被应用管理的有效用户会话生成一个 CSR ...

  5. Web API CSRF保护实现

    Web API CSRF保护实现 这次自己实现了类似jQuery中ajax调用的方法,并且针对RESTFul进行了改造和集成,实现的A2D AJAX接口如下: $.ajax.RESTFulGetCol ...

  6. 如何模拟登陆添加了CSRF保护的网站

    上次写了篇文章,内容是如何利用WebClient模拟登陆CSRF控制的网站,回复中有人还是不理解,现在另开一篇,打算说说用Python如何来登陆. 开写之前,先说下为什么webrequest不行,常规 ...

  7. laravel csrf保护

    有时候我们的项目需要和外部的项目进行接口对接,如果是post的方式请求;laravel要求csrf保护 但是别人是ci框架或者没有csrf_token的;该如何处理呢? 可以把我们不需要csrf的ur ...

  8. laravel5.2总结--csrf保护

      CSRF攻击:     CSRF 顾名思义,是伪造请求,冒充用户在站内的正常操作.我们知道,绝大多数网站是通过 cookie 等方式辨识用户身份(包括使用服务器端 Session 的网站,因为 S ...

  9. HTML form without CSRF protection,HTML表单没有CSRF保护

    HTML form without CSRF protection =HTML表单没有CSRF保护 CSRF是伪造客户端请求的一种攻击,CSRF的英文全称是Cross Site Request For ...

随机推荐

  1. Android 主题theme说明 摘记

    主题Theme就是用来设置界面UI风格,可以设置整个应用或者某个活动Activity的界面风格.在Android SDK中内置了下面的Theme,可以按标题栏Title Bar和状态栏Status B ...

  2. 当使用composer安装组件时提示错误

    这种情况可以重装一下fxp/composer-asset-plugin 具体命令: php composer.phar global require "fxp/composer-asset- ...

  3. vue.js基础知识篇(6):组件详解

    第11章:组件详解 组件是Vue.js最推崇也最强大的功能之一,核心目标是可重用性. 我们把组件代码按照template.style.script的拆分方式,放置到对应的.vue文件中. 1.注册 V ...

  4. Linux入门练习

    1.echo是用于终端打印的基本命令: 1.1echo默认将一个换行符追加到输出文本的尾部. 1.2 echo中转义换行符 如需使用转义序列,则采用echo -e "包含转义序列的字符串&q ...

  5. 用最简单的方法判断JavaScript中this的指向

    目录 * 一个特例 * 开始判断 * 法则一:对象方法中的this指向对象本身(箭头函数形式的除外) * 法则二:多层嵌套函数中的this指向等同于包含该this的最近一个function的this ...

  6. 网络协议UDP

    ------------------------------互联网协议与协议族------------------------------tcp/ip协议介绍:计算机网络协议,不同类型不同厂家之间的终 ...

  7. 容器在 Weave 中如何通信和隔离?- 每天5分钟玩转 Docker 容器技术(65)

    上一节我们分析了 Weave 的网络结构,今天讨论 Weave 的连通和隔离特性. 首先在host2 执行如下命令: weave launch 192.168.56.104 这里必须指定 host1 ...

  8. Python内存优化

    实际项目中,pythoner更加关注的是Python的性能问题,之前也写过一篇文章<Python性能优化>介绍Python性能优化的一些方法.而本文,关注的是Python的内存优化,一般说 ...

  9. 初遇.net

    初遇.net 为了自己的理想我选择了.net课程进行自我提升,想想以后能成为一位程序猿不由得有点兴奋呢,还有另一件高兴的事是我认识了十几位来自不同区县的老师同学,都说人脉就是财富,是不是我的财富有多了 ...

  10. Java缓存类的实际应用场景

    不要着迷于技术,应把注意力放到问题上. 一个普通的后台管理系统,一定会有参数配置.参数配置数据表和其他的数据表是不同的,它的操作基本都是查的操作.参数配置的这些数据信息是贯穿在整个项目中,那么把他们放 ...