首页 > 关于Yii2框架中防御CSRF攻击方法的迷惑

关于Yii2框架中防御CSRF攻击方法的迷惑

我大致看了下Yii2框架中关于防御CSRF攻击的办法,大致原理是这样的:

我疑惑的是,Yii2里并没有进行_csrf重复使用的检查(也有可能是我没有看到),那攻击者完全可以在合法的情况下拿到_csrf和csrf_hash后,重复使用来进行非法的操作呢?


上面没有说清楚,我再详细地说一下:
比如现在有一个支付网站wwww.pay.com是基于yii2框架来搭建的,它有一个转账的功能,使用post方式进行提交的,提交表单的url是wwww.pay.com/zhuazhang,表单大致长这样:

<form action="./zhuazhang" method="post">
    <input type="hidden" name="csrf_hash" value="" />
    <input type="text" name="price" />
    <input type="text" name="to_user_id" />
    <input type="submit" value="确认转账" />
</form>

我先打开这个A网站这个转账的网页,通过查看当前网页源代码拿到csrf_hash的值,再通过网页开发者工具拿到请求头里的_csrf值,假设拿到的csrf_hash值为wfwlfemlgesagg,_csrf的值为abc。

现在我开始进行CSRF攻击,在自己的网页也写一个同样的表单:

<form action="wwww.pay.com/zhuazhang" method="post">
    <input type="hidden" name="csrf_hash" value="wfwlfemlgesagg" />
    <input type="text" name="price" value="1000" />
    <input type="text" name="to_user_id" value="我的user id" />
    <input type="submit" value="确认转账" />
</form>

请求头里设置_csrf为abc。

然后把这个网页链接发给别人,让他点击,他点击进入后,表单内容就提交到wwww.pay.com的服务器了,服务器端通过yii2框架提供的算法进行验证,验证通过(当前通过啦,csrf_hash和_csrf都是正常手段生成的,而且没有进行过重复验证),然后这个人的账户就少了1000元。


攻击者在合法的情况下拿到_csrf就是合法的用户操作,如果盗取别人的_csrf就是存在xss漏洞。

CSRF的Token仅仅用于对抗CSRF攻击。

【热门文章】
【热门文章】