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

导入

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

from flask_wtf.csrf import CSRFProtectcsrf = 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()

转载于:https://www.cnblogs.com/gaegle/p/7570890.html

Flask-WTF CSRF 保护P3相关推荐

  1. Flask框架——CSRF保护

    目录 CSRF攻击 如何防御CSRF攻击 Flask框架中的CSRF保护机制 CSRF攻击 CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造. CSRF指攻击者盗用 ...

  2. ajax头文件报错,AJAX的CSRF保护

    如果使用ajax传输数据,需要在AJAX中要使用csrf保护. 一般而言,即在后端已经使用了CSRFProtect(app)的前提下, 如果想使用ajax,避免400的报错,可以前端的表单里引入标签, ...

  3. html表单没有csrf保护,如何在Symfony 1.4中为表单禁用CSRF保护/验证

    csrf令牌可为你的表单提供保护, 使其免受跨站请求伪造(CSRF)的攻击, 该攻击迫使最终用户在当前已通过身份验证的Web应用程序上执行不需要的操作.在某些项目中, 由于缺少在视图中定义同一实体的多 ...

  4. 无csrf防护的html页面,Springs CSRF保护仅* HTML登录页面

    我正在尝试利用Spring Security内置的CSRF保护.这些是我正在使用的spring版本: Spring Framework版本-4.2.1 spring安全-4.0.2 Spring安全性 ...

  5. csrf spring_无状态Spring安全性第1部分:无状态CSRF保护

    csrf spring 如今,随着RESTful架构变得越来越标准,可能值得花一些时间重新考虑当前的安全方法. 在这一小系列博客文章中,我们将探索以无状态方式解决与Web相关的安全性问题的几种相对较新 ...

  6. 无状态Spring安全性第1部分:无状态CSRF保护

    如今,随着RESTful架构变得越来越标准,可能值得花一些时间重新考虑当前的安全方法. 在这个小系列的博客文章中,我们将探索一些以无状态方式解决与Web相关的安全问题的相对较新的方法. 这第一篇文章是 ...

  7. Spring MVC,Thymeleaf,Spring Security应用程序中的CSRF保护

    跨站点请求伪造(CSRF)是一种攻击,它迫使最终用户在当前已通过身份验证的Web应用程序上执行不需要的操作. 如果您使用Spring Security 3.2及更高版本,在Spring MVC / T ...

  8. flask wtf用的多吗_WTF是Docker吗?

    flask wtf用的多吗 Docker和Docker英文简要说明 内容: 什么是码头工人? 在Docker中部署Node.js应用 什么是docker compose以及如何使用? 什么是Docke ...

  9. HTML表单没有CSRF保护漏洞

    0x00 背景 CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/X ...

  10. 使用Spring Security和Thymeleaf进行CSRF保护

    1. 简介 Thymeleaf是一个Java模板引擎,用于处理和创建HTML,XML,JavaScript,CSS和纯文本.有关Thymeleaf和Spring的介绍,请查看这篇文章. 在本文中,我们 ...

最新文章

  1. 最新机器学习库Scikit-learn库使用总结.pptx
  2. go 接收 ffmpeg avpacket
  3. Python操作Rabbit MQ的5种模式
  4. 80后的网上创业生涯:想得到做得到
  5. 揭秘阿里秒级百万TPS平台架构实现
  6. HazelCast的Spring-Boot和Cache抽象
  7. JS window对象 返回前一个浏览的页面 back()方法,加载 history 列表中的前一个 URL。 语法: window.history.back();...
  8. 计算机磁盘读取信息,VBA如何获取电脑磁盘信息,这个方法一定要知道
  9. 国产网游制作现状、差距及提高
  10. 什么?都2021年了还不会ajax嘛,来这里让您快速学会Ajax
  11. 向日葵 监控 android,就是如此简单!向日葵远程控制Android手机版教程
  12. 关于单片机电路中NPN三极管与PNP三极管的接法问题
  13. 【HTML】讲讲HTML5视频播放的方式
  14. 浅谈chatGPT——新必应(bing)版本
  15. 伊朗加油站遭网络攻击致瘫痪、Babuk勒索软件源代码泄露|10月28日全球网络安全热点
  16. 设计一个jsp页面,要求在网页上显示当前日期和时间,如果时间在6:00~12:00,输出“上午好”:如果时间在12:00 18:00, 输出“下午好”:
  17. crm客户关系管理系统总结
  18. 3.7 杭电复试题2011
  19. new DecimalFormat(#0.###)中0与#
  20. java 事务补偿机制_重试补偿机制完善

热门文章

  1. leetcode 21 合并两个有序链表 (python)
  2. 虚拟机和电脑共享文件夹
  3. 跟随腾讯WeTest一起来2019Unreal Open Day!
  4. 上次被人说TK不好咯,这次给你整个高大上的
  5. oracle11 刚刚安装后提示invalid username password logon denied
  6. Python-字典遍历
  7. Rhel6-piranha配置文档
  8. eigrp 负载均衡和非负载均衡实验
  9. 【备忘录】sublime text的使用
  10. 32G内存oracle内核设置,浅谈安装ORACLE时在Linux上设置内核参数的含义