跨站点请求伪造(CSRF)
全名:cross site request forgery
CSRF简介
- 用户先访问一个页面。
- 然后再访问一个自己域下构造的一个页面。其中有一个img标签,标签中,有用于删除的链接。
- 成功了。
攻击者诱使用户访问了一个页面,然后以些用户身份在第三方站点里执行一个操作。因为cookie会携带。
浏览器的cookie策略
浏览器的cookie分为两种
- Session Cookie也称为临时cookie
- Third-party Cookie,也称为为本地cookie
两者的区别在于,Third-party cookie是服务器在set-cookie里指定了expire时间,只有到了exire时间后,才会失效。
如果浏览器从一个域的页面中,要加载另一个域的资源,由于安全原因,某些浏览器会阻止Third-party的发送
但是目前有些浏览器是允许发送的。如Firefox opera chrome android.
P3P头的作用
P3P Header 是w3c制定的一项关于隐私的标准,全称是The platform for privacy preference.如果网站返回给浏览器的HTTP头中包含有P3P3头,则在某种程度上来说,允许浏览器发送第三方cookie.P3P主要用于类似广告等需要跨域访问的页面。
CSRF的防御
验证码
验证码确实能很好地遏制CSRF,但是对用户体验的伤害是非常大的。所以只作为一种辅助的手段,而不能作为最主要的解决方案。
Referer Check
最常见的就是:防止图片盗链。
最大的缺陷:服务器并非什么时候都能取到Referer.
其中flash的一些版本,可以允许自己设定referer。
所以不能依赖referer来做防御手段。但是作为监控手段,还是可行的。
anti csrf token
使用一个token来防御,目前是最安全的。
注:如果有XSS,那么CSRF的防御就没有意义了。