随着互联网的高速发展,web安全问题显得愈发重要。web
CSRF全名是Cross Site Request Forgery,翻译过来,即跨站请求伪造。那它是如何伪造的呢?请看下面的案例:安全
http://www.a.com
,网站有一个get请求
xxx/delete?id=1
用于删除用户我的信息。 这时候弹出一个引人入胜的广告被用户点击,或者用户忽然有更重要的访问其余网站的需求而直接开了一个tab,暂停了a网站的访问。
以上等缘由用户来到了b网站(也多是钓鱼网站) http://www.b.com
。 b网站内已经藏好了一张不可见的图片 <img src="xxx/delete?id=1" />
; 等用户返回a网站时,发现本身的我的信息不见了!bash
没错,就是这个看不见的图片,发送了删除我的信息的请求到a服务器,而a服务器又缺乏相应的防护措施,引发了灾难。相似的场景也多是用户的财产损失、帐号注销……等等,假若该连接经过消息或发帖接口发送给好友或公共平台,好友或平台用户查看到后,攻击就会像病毒同样散播开来(参照百度曾经的CSRF Worm)。服务器
这里并非教你们怎么搞坏事,咱们知道,知己知彼,方能百战不殆。要知道怎么防护,总得知道攻击的特色才好下手不是?cookie
那么在用户登陆了a网站 http://www.a.com
后,又跳到(或打开)了b网站http://www.b.com
。咱们在b网站里有这样的一个标签session
<img hidden src="http://www.a.com/xxx/delete?id=1" />
复制代码
这个标签一经加载,a网站的服务器就收到了这个删除请求。 只能用img标签攻击吗? Too young, too simple.
具备src属性的标签均可以的。 那有人说把请求 /xxx/delete?id=1
方式改成post就好了吧? Too young, too simple, too!
post请求咱们能够这样攻击:web安全
<form hidden action="http://www.a.com/xxx/delete" method="post">
<input value="1" name="id" />
// 假如还须要其余参数,这里再搞几个表单出来
</form>
<script>
window.onload = function(){
document.forms[0].submit();
}
</script>
复制代码
根据上面的攻击过程,咱们发现只要伪造了session或cookie,后面每一步都挺顺利的。防护的话,就是要它不那么顺利。post
参考资料 《白帽子讲Web安全》,吴翰清·著网站