使用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. 【Linux 网络】网络测试命令 长期更新

    一.网络测试命令 1.测试 网络连接 发送两包后停发 [oracle@hadoop ~]$ PING www.a.shifen.com (() bytes of data. bytes from tt ...

  2. spring boot / cloud (三) 集成springfox-swagger2构建在线API文档

    spring boot / cloud (三) 集成springfox-swagger2构建在线API文档 前言 不能同步更新API文档会有什么问题? 理想情况下,为所开发的服务编写接口文档,能提高与 ...

  3. Android studio一些常见技巧(不断更新)

    一.Android studio取消默认每次打开时打开最后一个项目 二.as添加jar包 新建一个libs目录,在java下 进行手动gragle同步或者如下图 三.代码边上的小图标 1.布局文件中存 ...

  4. SVG文本

    前面的话 本文将详细介绍SVG文本相关内容 位置属性 在一个SVG文档中,使用<text>元素来设置文本,<text>元素有x.y.dx.dy这四个位置属性 [x和y] 属性x ...

  5. C# FTP上传与下载文件

    public class UploadFile { string ftpServerIP; string ftpRemotePath; string ftpUserID; string ftpPass ...

  6. PHP文件操作整理

    三种目录表示: ./     代表当前目录 ../    代表父级目录 /   代表根目录 常用的文件操作函数有 通用读写:                  fpen()  fwrite() fre ...

  7. keepalive之LVS-DR架构

    author:JevonWei 版权声明:原创作品 Keepalive实战之LVS-DR 实验目的:构建LVS-DR架构,为了达到LVS的高可用目的,故在LVS-DR的Director端做Keepal ...

  8. Javascript的内容摘要

    JS简介和变量 {JS的三种方式}            1 HTML中内嵌JS(不提倡使用)            <button onclick="javascript:alert ...

  9. 基于大数据的电影网站项目开发之CentOS的安装(一)

    一.下载VMware并安装,至于安装教程从网上搜索进行参考 二.下载系统镜像文件,这里使用的是CentOS-6.5-x86_64-bin-DVD1.iso 三.安装镜像文件 运行VMware work ...

  10. java可访问修饰符

    修饰符 同一个类中 同一个包中 不同包的子类 不提供包的非子类 private √ friendly(省略) √ √ protected √ √ √ public √ √ √ √