CSRF(Cross Site Request Forgery),翻译成中文就是跨站点请求伪造。html
攻击者首先在本身的域构造一个页面跨域
http://www.a.com/csrf.html
其内容为浏览器
<img src="http://blog.com/article?m=delete&id=1" />
诱使目标用户访问这个页面,用户看到了一张没法显示的照片,可是回头再看博客id=1的文章已经被删除了。这是以该用户身份(发送了Cookie)在第三方站点里执行了一次操做,这个请求是攻击者伪造的,因此叫“跨站点请求伪造”。安全
浏览器所持有的Cookie分为两种:一种是“Session Cookie”,又称“临时Cookie”;另外一种是“Third-party Cookie”,也称为“本地Cookie”。Third-party Cookie服务器指定了Expire时间。Session Cookie没有指定过时时间,新打开的Tab页也是有效的,但浏览器关闭后就失效了。服务器
一个域加载另外一个域的资源,因为安全缘由,许多浏览器会阻止Third-party Cookie的发送,只能发送Session Cookie。删除文章的例子是在不会阻止Third-party Cookie发送的浏览器中实现的。网络
浏览器拦截第三方Cookie发送,在某种程度上下降了CSRF攻击的威力。
可是P3P Header会是问题复杂起来,它是W3C制定的一项关于隐私的标准,若是网站返回给浏览器的HTTP头中包含有P3P头,将容许浏览器发送第三方Cookie。它重要用于须要跨域访问页面的场景,如父页面b嵌入了iframe,iframe的src指向的a页面网址,a页面响应头有Set-Cookie。通常状况下因为跨域,在a.com上Set-Cookie是不会成功的,可是加入P3P头后,能够跨域Set-Cookie成功,浏览器也不会再拦截第三方Cookie的发送。P3P头只须要由网站设置一次便可,以后每次请求都会遵循此策略。网站
其实对于攻击者来讲,也能够有许多方法构造POST请求。
最简单的方法好比在页面中构造一个form表单,使用JavaScript自动提交这个表单。spa
Flash CSRF也有多种方式可以发送网络请求,包括POST请求。除了使用URLRequest外,还能够使用getURL、loadVars等。在IE六、IE7中,Flash发送的网络请求都可以带上本地Cookie。翻译
2008年9月,公布了一个百度的CSRF Worm。code
http://msg.baidu.com/?...sn=用户帐户&co=消息内容...
修改参数sn,能够对指定用户发送短消息。
而另外一个接口能查询出某个用户的全部好友
http://frd.baidu.com/?...un=用户帐户...
二者相结合,让一个百度用户查看恶意页面后,给他全部好友发送一条短消息,消息中又包含一个恶意页面,使得好友将消息发送给他们的好友,就能够造成一个CSRF Worm。