• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

yii2对csrf攻击的防范措施

php 搞代码 4年前 (2022-01-21) 16次浏览 已收录 0个评论

这篇文章主要介绍了关于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 攻击主要有三种策略:

发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址