攻击手段
释例
目标网站a:www.a.com
恶意网站b:www.b.com
b 站含有一段恶意代码比如:<img src="http://www.a.com/deleteUserInfo">
如果用户刚访问过 a 站(cookie 未过期),然后去访问b 站,此时 b 站便会伪装成该用户向 a 站发出deleteUserInfo的操作,以此达到攻击目的。
特点
欺骗用户浏览器,让其以用户的名义执行操作。
本质在于攻击者欺骗用户去访问自己设置的地址
攻击者并不能通过CSRF攻击来直接获取用户的账户控制权,也不能直接窃取用户的任何信息。
防御措施
检查Referer字段
在http请求头部添加一个 referer 字段用以表明该请求来自哪个站点。从 a 站发出的请求的 referer 为 www.a.com;从 b站发出的请求 referer 字段为www.b.com。
优点
这种办法简单易行,工作量低,仅需要在关键访问处增加一步校验。
缺点
1.因Referer 的值是由浏览器提供,完全依赖浏览器发送正确的Referer字段,无法保证来访的浏览器的具体实现,亦无法保证浏览器没有安全漏洞影响到此字段(即可能被伪造)。
2.浏览器或者代理可能为了防止泄露隐私而去掉该字段
添加校验token
在访问敏感数据请求时,要求用户浏览器提供不保存在cookie中,并且攻击者无法伪造的数据作为校验,那么攻击者就无法再执行CSRF攻击。
这种数据通常是表单中的一个数据项。服务器将其生成并附加在表单中,其内容是一个伪乱数。当客户端通过表单提交请求时,这个伪乱数也一并提交上去以供校验。正常的访问时,客户端浏览器能够正确得到并传回这个伪乱数,而通过CSRF传来的欺骗性攻击中,攻击者无从事先得知这个伪乱数的值,服务器端就会因为校验token的值为空或者错误,拒绝这个可疑请求。
缺点
1.在于需要为每次请求添加 token略显麻烦。
2.在类似论坛类的系统里攻击者可以在其中加入攻击网站的地址。由于系统也会在这个地址后面加上 token,黑客可以在自己的网站上得到这个 token,并马上就可以发动 CSRF 攻击。
在 HTTP 头中自定义属性并验证
将 token 加入到 http 头部自定义属性中。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性。
通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。
缺点
XMLHttpRequest 请求通常用于 Ajax 方法中对于页面局部的异步刷新,通过该类请求得到的页面不能被浏览器所记录下,从而进行前进,后退,刷新,收藏等操作,给用户带来不便。
网友评论