使用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. 使用XMLHttpRequest异步通信

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Java 垃圾回收机制(早期版本)

    Java 垃圾回收机制在我们普通理解来看,应该视为一种低优先级的后台进程来实现的,其实早期版本的Java虚拟机并非以这种方式实现的. 先从一种很简单的垃圾回收方式开始. 引用计数 引用计数是一种简单但 ...

  4. AOP 面向切面的编程

    一.面向切面的编程需求的产生 代码混乱:越来越多的非业务需求(日志和验证等)加入后,原有的业务方法急剧膨胀.每个方法在处理核心逻辑的同时还必须兼顾其他多个关注点. 代码分散: 以日志需求为例,只是为了 ...

  5. 新博客在SEO方面需要注意哪几点?

    无论是什么程序的博客,都应该注意这重要的几点! 第一点:网站目标明确进入主题,有些人对于SEO不是特别熟悉,或者说没有接触过.当你做好一个网站,不管网站内容是什么,首先你都得了解最基本的SEO,比如网 ...

  6. 2017面向对象程序设计(Java)第二周学习总结

    2017面向对象程序设计(Java)第二周学习总结 直系学妹学弟们好!额...不要问我为什么把学妹放前面,我也不知道!我只是你们和蔼可亲的学长一枚而已.也不要问为什么是第二周学习总结而不是第一周,因为 ...

  7. [2016-03-15]rabbitmq notes

    安装 系统:CentOS 6 环境: rabbitmq 依赖的Erlang环境包 wget https://www.rabbitmq.com/releases/erlang/erlang-18.1-1 ...

  8. Java后台开发必备软件(windows环境下)

    一.必备软件 1.Jdk,推荐下载最新版2.Ide,推荐 IntelliJ IDEA3.服务器,如 tomcat / jetty4.数据库终端界面,推荐 Navicat Premium(自行破解),5 ...

  9. oracle语句批处理

    数据量有40万条,从一个对象table_01一条一条取数到对象table_02,如果用原始的 Statement Statmt =comm.createStatement(); String sql= ...

  10. 【grunt】两小时入门

    目录: 1. 用途和场景 2.Grunt插件 3.相关资源 4.环境安装 5.开始学习 5.1 一个新项目 5.2 生成package.json 5.3 在项目中安装grunt和相关插件 5.4 Gr ...