这篇文章主要介绍了关于yii2对csrf攻击的防范措施,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
今天北哥就给大家普及下csrf是啥?如果你已经知道了可以直接拉文章到底部点个赞。
CSRF(Cross-site request forgery跨站请求伪造)是一种对网站的恶意利用,在 2007 年曾被列为互联网 20 大安全隐患之一。
关于CSRF,要从一个故事开始~
老王丢钱事件
这个故事要从程序员老王丢了1万块钱说起,总之是进了小偷,找回无果。丢钱后的老王一直在思考,钱是怎么丢的、为何丢钱、为何是我丢钱~~
后来老王出现了严重的心理问题,他决定报复社会。
老王首先研究了网银系统,他发现转账是通过GET形式
https://bank.abc.com/withdraw?account=liuxiaoer&amount=1000&to=abei
这意思就是说将 liuxiaoer 的1000元钱转给abei,当然当请求到达银行服务器后,程序会验证该请求是否来自合法的session并且该session的用户就是 liuxiaoer 并且已经登录。
老王自己也有一个银行账号 wang2,他尝试登录并且通过浏览器发送请求给银行,代码如下
https://bank.abc.com/withdraw?account=liuxiaoer&amount=1000&to=wang2
失败了~因为当前登录账号是老王自己,发送请求后服务器发现session所属用户wang2和account=liuxiaoer并不是一个人,因此被拒绝。
也就是说这个操作必须是 liuxiaoer 自己才可以,复仇的力量是可怕的,老王通过facebook层层找到了 liuxiaoer 就是快递员老刘的银行账号。
于是一个伟大的计划诞生了,老王的计划是这样的。
1、首先做一个网页,在网页中加入如下代码
src="https://bank.abc.com/withdraw?account=liuxiaoer&amount=1000&to=wang2"
然后通过各种情景让老刘(liuxiaoer)访问了此网页。
2、当老刘(liuxiaoer)访问此网页后,上面的请求会被发送到银行,此刻还会带着老刘(liuxiaoer)自己的浏览器cookie信息,当然这样一般也不会成功,因为银行服务器发现老刘(liuxiaoer)并不在登录状态。
3、老王想了一个招,他在淘宝找了一个灰色商人老李,让他通过种种方法,总之让老刘(liuxiaoer)通过浏览器给老李转了一次款。
4、就在第三步操作的2分钟内,老王成功让老刘(liuxiaoer)再一次访问了自己做的网页,你知道的,此刻老刘(liuxiaoer)在银行的session还没有过期,老王网页给银行服务8本文来源gao.dai.ma.com搞@代*码(网$
搞代gaodaima码
器发送请求后,验证通过,打款成功。
5、老王收到了款,老刘(liuxiaoer)并不知道这一切,对于银行来说这是一笔在正常不过的转账。
这就是CSRF攻击,浏览器无法拦截。
CSRF攻击特点
基于上面血淋淋的故事,我们总结下CSRF攻击的几个特点。
-
黑客借助于受害者的cookie等浏览器信息骗取服务器新人,黑客并拿不到cookie等。
-
由于浏览器同源策略,黑客无法拿到攻击的响应结果,能做的只是发起请求,你是否还记得很多钓鱼网站都模拟了登录框么?
-
CSRF攻击主要是发送修改数据请求。
CSRF防御对象
因此我们要保护的是所有能引起数据变化的客户端请求,比如新建、更新和删除。
CSRF防御方案
基于CSRF攻击特点,在业界目前防御 CSRF 攻击主要有三种策略: