Flask-WTF CSRF 保护P3
使用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相关推荐
- Flask框架——CSRF保护
目录 CSRF攻击 如何防御CSRF攻击 Flask框架中的CSRF保护机制 CSRF攻击 CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造. CSRF指攻击者盗用 ...
- ajax头文件报错,AJAX的CSRF保护
如果使用ajax传输数据,需要在AJAX中要使用csrf保护. 一般而言,即在后端已经使用了CSRFProtect(app)的前提下, 如果想使用ajax,避免400的报错,可以前端的表单里引入标签, ...
- html表单没有csrf保护,如何在Symfony 1.4中为表单禁用CSRF保护/验证
csrf令牌可为你的表单提供保护, 使其免受跨站请求伪造(CSRF)的攻击, 该攻击迫使最终用户在当前已通过身份验证的Web应用程序上执行不需要的操作.在某些项目中, 由于缺少在视图中定义同一实体的多 ...
- 无csrf防护的html页面,Springs CSRF保护仅* HTML登录页面
我正在尝试利用Spring Security内置的CSRF保护.这些是我正在使用的spring版本: Spring Framework版本-4.2.1 spring安全-4.0.2 Spring安全性 ...
- csrf spring_无状态Spring安全性第1部分:无状态CSRF保护
csrf spring 如今,随着RESTful架构变得越来越标准,可能值得花一些时间重新考虑当前的安全方法. 在这一小系列博客文章中,我们将探索以无状态方式解决与Web相关的安全性问题的几种相对较新 ...
- 无状态Spring安全性第1部分:无状态CSRF保护
如今,随着RESTful架构变得越来越标准,可能值得花一些时间重新考虑当前的安全方法. 在这个小系列的博客文章中,我们将探索一些以无状态方式解决与Web相关的安全问题的相对较新的方法. 这第一篇文章是 ...
- Spring MVC,Thymeleaf,Spring Security应用程序中的CSRF保护
跨站点请求伪造(CSRF)是一种攻击,它迫使最终用户在当前已通过身份验证的Web应用程序上执行不需要的操作. 如果您使用Spring Security 3.2及更高版本,在Spring MVC / T ...
- flask wtf用的多吗_WTF是Docker吗?
flask wtf用的多吗 Docker和Docker英文简要说明 内容: 什么是码头工人? 在Docker中部署Node.js应用 什么是docker compose以及如何使用? 什么是Docke ...
- HTML表单没有CSRF保护漏洞
0x00 背景 CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/X ...
- 使用Spring Security和Thymeleaf进行CSRF保护
1. 简介 Thymeleaf是一个Java模板引擎,用于处理和创建HTML,XML,JavaScript,CSS和纯文本.有关Thymeleaf和Spring的介绍,请查看这篇文章. 在本文中,我们 ...
最新文章
- 最新机器学习库Scikit-learn库使用总结.pptx
- go 接收 ffmpeg avpacket
- Python操作Rabbit MQ的5种模式
- 80后的网上创业生涯:想得到做得到
- 揭秘阿里秒级百万TPS平台架构实现
- HazelCast的Spring-Boot和Cache抽象
- JS window对象 返回前一个浏览的页面 back()方法,加载 history 列表中的前一个 URL。 语法: window.history.back();...
- 计算机磁盘读取信息,VBA如何获取电脑磁盘信息,这个方法一定要知道
- 国产网游制作现状、差距及提高
- 什么?都2021年了还不会ajax嘛,来这里让您快速学会Ajax
- 向日葵 监控 android,就是如此简单!向日葵远程控制Android手机版教程
- 关于单片机电路中NPN三极管与PNP三极管的接法问题
- 【HTML】讲讲HTML5视频播放的方式
- 浅谈chatGPT——新必应(bing)版本
- 伊朗加油站遭网络攻击致瘫痪、Babuk勒索软件源代码泄露|10月28日全球网络安全热点
- 设计一个jsp页面,要求在网页上显示当前日期和时间,如果时间在6:00~12:00,输出“上午好”:如果时间在12:00 18:00, 输出“下午好”:
- crm客户关系管理系统总结
- 3.7 杭电复试题2011
- new DecimalFormat(#0.###)中0与#
- java 事务补偿机制_重试补偿机制完善