4.1 CSRF简介
(1)CSRF的全名是Cross Site Request Forgery,即跨站点请求伪造
(2)可以通过使用一个img标签,并设置其地址指向删除某博客文章的链接。这里攻击者是通过诱使目标用户点击自己构造的页面,并进一步可以删掉博客文章。

4.2 CSRF进阶
(1)攻击者伪造的请求之所以能够被搜狐服务器验证通过,是因为用户的浏览器成功发送了Cookie。
(2)浏览器所持有的Cookie分为两种:一种是“Session Cookie”,又称“临时Cookie”;另一种是“Third-party Cookie”,也称“本地Cookie”。
(3)Third-party Cookie是服务器在Set-Cookie时指定了Expire时间,只有到了Expire时间后Cookie才会失效,所以这种Cookie会保存在本地.
(4)Session Cookie则没有指定Expire时间,所以浏览器关闭后,Session Cookie就失效了。
(5)P3P头的副作用:P3P Header是W3C制定的一项关于隐私的标准,全称是The Platform for Privacy Preferences;在网站的业务中,P3P头主要用于类似广告等需要跨域访问的页面;P3P头的介入改变了a.com的隐私策略,从而使得iframe、script等标签在IE中不再拦截第三方Cookie的发送;P3P只需要由网站设置一次即可,之后每次请求都会遵循此策略,而不需要再重复设置。
(6)CSRF可以利用GET请求、POST请求
(7)构造POST请求的方法:最简单的方法,就是在一个页面中构造好一个form表单,然后使用JavaScript自动提交这个表单;攻击者甚至可以将这个页面隐藏在一个不可见的iframe窗口中,那么整个自动提交表单的过程,对于用户来说也是不可见的。
(8)在IE6、IE7中,Flash发送的网络请求均可以带上本地Cookie;但是从IE8起,Flash发起的网络请求已经不再发送本地Cookie了
(9)2008年9月,国内的安全组织80sec公布了一个百度的CERF Worm。

4.3 CSRF 防御
(1)验证码是对抗CSRF攻击最简洁有效的防御方法。
(2)Referer Check最常见的应用是“防止图片盗链”,Referer Check可以被用于检查请求是否来自合法的“源”
(3)现在业界针对CSRF的防御,一致的做法是使用一个Token。
(4)CSRF能攻击成功的本质原因是重要操作的所有参数都是可以被攻击者猜测到的
(5)Token应该作为一个“秘密”,为用户与服务器所共同持有,不能被第三者知晓
(6)Token的使用原则:Token的生成一定要足够随机;如果用户已经提交了表单,则这个Token已经消耗掉,应该再次重新生成一个新的Token;如果Token保存在Cookie中,可以考虑生成多个有效的Token;注意Token的保密性;应该尽量把Token放在表单中,把敏感操作由GET改为POST。

4.4 小结
(1)CSRF攻击是攻击者利用用户的身份操作用户账户的一种攻击方式。设计CSRF防御方案必须理解其原理和本质。
(2)在使用Anti CSRF Token时,主要Token的保密性随机性