CSRF防范介绍之二

本文介绍了CSRF防范原理,重点讲解了如何在Flask应用中使用Flask_WTF库进行CSRF防护,包括设置secret_key、生成和验证token,以及在AJAX请求中的处理方式。并通过源码解析展示了加密和存储过程。

一、前言

CSRF防范介绍之一》我们介绍了使用Flask搭建CSRF攻击的钓鱼网站,主要是利用Form表单能跨域提交获取cookie值的漏洞,这节我们再来介绍一下使用Flask_wtf的自带的一套CSRF防护体系。

二、CSRF防范原理

最基础防护方法的是检测Refer值,但Refer值是极其容易被伪造,一般采用随机生成Token的方式来防范,逻辑如下,这个与你的代码是哪一门语言没有关系。

1、后端生成一个token存放在session或redis中。

2、将token返回给前端。

3、前端表单提交时携带上该token。

4、后端校验提交的token和自己生成的token是否相同,如相同则放行,否则认为是伪造请求,拒绝服务。

三、Flask_WTF CSRF

我们对《CSRF防范介绍之一》 的网站转账模块进行改造,使用flask_wtf重构一下代码。

Flask_WTF集成了WTForms,并带有 csrf 令牌的安全表单和全局的 csrf 保护的功能。

pip install flask_wtf

1、设置应用程序secret_key用于加密生成的csrf_token值。

注:应用程序app对象配置secret_key的值,然后需要导入CSRFProtect类并在初始化时关联app。

2、在转账页面表单中添加CSRF令牌。

启动应用后,这时你登录了正常网站A,然后又点击了恶意网站B 【领取优惠券】按纽后,会报提交请求失败。

注:如果是ajax请求,可以在http头上添加上X-CSRFToken 。

四、flask_wtf csrf源码解析

1、源代码文件 flask_wtf/csrf.py

注:生成一个随机字符进行sha1加密后,将其存放在session中,并与应用配置的secret_key进行序列化后生成token,最后将token设置到g中(g是单次请求全局变量,这样表单页面就可以直接引用)。

2、校验

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值