之前介绍过csrf的攻击原理和防御, 请见"https://blog.csdn.net/stpeace/article/details/53512283", 本文就不再赘述。
最近模拟实践了一番,来简要说说:
1. Alice欠Bob 100元钱, 通过银行转账给Bob, 一切合情合理, Alice的浏览器执行的操作是:
http://www.bank.com/transfer.php?from=Alice&money=100&to=Bob
2. Cathy想攻击一下Alice, 所以Cathy在自己的浏览器执行:
http://www.bank.com/transfer.php?from=Alice&money=9999&to=Cathy
显然, Cathy不能得逞, 因为Alice在转账的时候, 银行后台服务器会验证http请求中的cookie信息和身份, 确认是Alice本人, 才能真正执行转账操作(因为Alice输入过银行密码, 所以能确认Alice的身份)
3. Cathy并不气馁, 就自己制作了一个网页, 访问方法是:http://www.benefit.com/choujiang.php, 用抽奖来吸引眼球, choujiang.php吐回的内容是:
<html>
<body>
<form method="get" action="http://www.bank.com/transfer.php">
<input type="hidden" name="from" value="Alice">
<input type="hidden" name="money" value="9999">
<input type="hidden" name="to" value="Cathy">
<input type="button" onclick="submit()" value="Begin Choujiang">
</form>
</body>
</html>
只要Alice点击了http://www.benefit.com/choujiang.php, 就会在自己的浏览器页面显示一个抽奖按钮。
如果Cathy刚给Bob转账完毕, 又点击了这个"Begin Choujiang"按钮, 就相当于Cathy的浏览器发起了如下请求:
http://www.bank.com/transfer.php?from=Alice&money=9999&to=Cathy
此时, 一场悲剧上演了, 银行后台服务器从http的cookie中识别出确实是Alice在转账给Cathy, 是合理操作。但是,Alice并不知情, 于是9999元流进了Cathy的银行账户。
本质上, 就是Alice无意中帮Cathy执行了Cathy自己想执行而没法执行的转账操作。
应该说明白了, 有兴趣的朋友可以自己模拟下。