第4章 跨站点请求伪造(CSRF)
Cross Site Request Forgery
4.1 CSRF简介
举例,攻击者仅仅诱使用户访问了一个页面,就以该用户的身份在第三方站点里执行了一次操作(删除了搜狐博客上的一篇文章)。
4.2 CSRF进阶
4.2.1 浏览器的Cookie策略
- 浏览器所持有的Cookie分为两种:
- Session Cookie,又称“临时Cookie”
- 没有指定Expire时间,浏览器关闭后,Seesion-Cookie就失效了。
- 保存在浏览器的内存空间中
- Third-party Cookie,又称“本地Cookie”
- 服务器在Set-Cookie时指定了Expire时间,这种Cookie会保存在本地。
- 保存在本地
- Session Cookie,又称“临时Cookie”
4.2.2 P3P头的副作用
- P3P Header,The Platform for Privacy Preference.
- 如果网站返回给浏览器的HTTP头中包含有PSP头,则在某种程度上来说,将允许浏览器发送第三方Cookie。
- GET & POST
- Flash CSRF
- CSRF Worm
4.3 CSRF的防御
4.3.1 验证码
4.3.2 Refer Check
4.3.3 Anti CSRF Token
现在业界针对CSRF的防御,一致的做法是使用一个Token
- CSRF的本质
- CSRF攻击成功的本质原因是,重要操作的所有参数都是可以被攻击者猜测到的。
- 攻击者只有预测出URL的所有参数与参数值,才能成功地构造一个伪造地请求。
- 解决方案
- 把参数加密,或者使用一些随机数,从而让攻击者无法猜测到参数值。
- 存在问题
- 加密/混淆后的URL非常难读,对用户非常不友好。
- 如果加密的参数每次都改变,则某些URL将无法被用户收藏。
- 参数被加密或哈希,会给数据分析工作造成很大的困扰。
- 解决方案
- 更通用的解决方案:Anti CSRF Token
- Token需要被同时放在表单和Session中。
- 要注意Token的保密性和随机性。
4.4 小结
CSRF攻击是攻击者利用用户的身份操作用户账户的一种攻击方式。