* 跨站请求伪造漏洞利用的重点攻击者了解受害者所在的站点
* 跨站请求伪造漏洞的技术重点在于攻击者需要精心构造可以完成目标装点数据修改的URL
* 跨站请求伪造漏洞的方法重点在于攻击者的目标站点具有持久化授权cookie或者受害者具有当前会话cookie,并且目标站点没有对用户在网站行为的第二授权
我们假定三个角色:攻击者、用户、网上银行、一个论坛。
攻击的流程主要分以下几个步骤:
1、用户连入网上银行操作,该网上银行使用持久化授权cookie,只要用户不清除cookies,任何时候连入网上银行时,该银行网站都认为该用户是有效的;
2、攻击者在论坛上发表图片,内嵌有GET或POST方法的URL并指向该网上银行,如果该URL由一个银行的合法用户发出,则该URL会使用户帐户被修改;
3、用户浏览此论坛并点击该图片,攻击者预设的URL被由用户发往银行站点,因该用户未清除cookie,该请求有效,用户帐户在用户并不知情的前提下被成功修改。
我们注意到,这个过程很象跨站脚本攻击,但实际上,是完全不同的。跨站脚本攻击需要在客户端写入恶意代码,以搜集cookie等信息,而跨站请求伪造则根本不需要向用户端写入任何东西,直接利用银行授权的持久认证和用户未清理的cookie。
这里的问题在于,论坛用户不能上传js脚本,于是直接利用URL来诱骗用户,以致于完成数据操作。
由此可见,该攻击的重点在于要知道目标站点和目标用户,并且该受害站点没有使用更多的授权认证。
对于web站点,将持久化的授权方法(例如cookie或者HTTP授权)切换为瞬时的授权方法(在每个form中提供隐藏field),这将帮助网站防止这些攻击。一种类似的方式是在form中包含秘密信息、用户指定的代号作为cookie之外的验证。
另一个可选的方法是“双提交”cookie。此方法只工作于Ajax请求,但它能够作为无需改变大量form的全局修正方法。如果某个授权的 cookie在form post之前正被java script代码读取,那么限制跨域规则将被应用。如果服务器需要在Post请求体或者URL中包含授权cookie的请求,那么这个请求必须来自于受信任的域,因为其它域是不能从信任域读取cookie的。