摘要
最近公司内部爆出一大波页面没有加token校验,然后各路大神就开始进行CSRF攻击了。CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。
什么是CSRF攻击?
CSRF(Cross-site request forgery),中文名称:跨站请求伪造。没什么高大上的,按字面上这么理解可以了。别的网站往你网站里发一个操作请求,然后,你的网站也不加校验一下是不是用户从你点击发送过来的操作,就直接处理了。
然后坏人随便做个网站,里面就一个静态页,包含一段自动发送操作请求的代码
<!-- 神奇的网页,点开就会偷钱的 -->
<form action="Transfer.php" method="POST">
<p>ToBankId: <input type="text" name="toBankId" value="xxx" /></p>
<p>Money: <input type="text" name="money" value="1000" /></p>
<p><input type="submit" value="Transfer" /></p>
</form>
就这么简单的一个静态页,然后就可以实现CSRF攻击了。比如把这个网站发到我们论坛上,www.woshihuairen.com 点开有美女裸照哟。然后你点了,然后你悲剧了。
如何防止CSRF攻击
校验来源,跨站的请求不接受即可。
参考文献
浅谈CSRF攻击方式
简要说一下我们如何使用token来防御CSRF
-
前台from表单里面加入Token字符串
@Html.AntiForgeryToken() //如果是ajax提交,提交参数还要加入:__RequestVerificationToken: $("input[name=__RequestVerificationToken]").val()
-
后台Action上面加入token验证的Attribute
[HttpPost,ValidateAntiForgeryToken] public ActionResult xxx() { }
Oh yeah,每次请求都有一段奇怪的验证码,再也不怕跨站请求了,可以高枕无忧咯
...
无忧个蛋蛋啊,摔。
还有提防这货 ---- XSS跨站脚本攻击,否则上面所做的一切都白做了。