介绍
- 攻击者盗用了你的身份,以你的名义发送恶意请求”——你可以这么理解CSRF攻击。
- CSRF是一种
依赖web浏览器的、被混淆过的代理人攻击
,往往涉及到个人隐私泄露以及财产安全
。
原理
- 由于浏览器的特性,会自动携带
同一域名下的cookie到服务器
,服务器端的某些功能验证cookie有效性后,就执行了该功能。 主要是修改个人数据(横向越权),添加用户(纵向越权)
等。
危害
- CSRF一般用于操作用户的资源,
- 使用用户的权限进行操作
- 窃取用户的相关信息。
其实可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。
与XSS比较
- CSRF不比XSS更有危险性。
- CSRF能完成的事,XSS更能够完成;
- XSS能完成的事,CSRF不一定能做到。
利用方式
- CSRF给电商
用户新增默认收货地址、发微博、添加管理员
等等,所有的敏感操作都可以是我们的攻击目标, - 也就是说,所有的敏感操作都需要进行CSRF的防护。
- 用户账号
授权相关的操作、二维码登陆、绑定第三方账号
等,这些功能有CSRF的话,就直接被盗号了。
防御方案
- CSRF的防护,主要是
referer限制、token、或验证码
。 - 甚至非常敏感的操作应该要使用短信验证这种。
- 另外,防护手段可以加上一条:
多使用post方式获取参数,进行敏感功能
。 - 如果你的请求仅仅是ajax请求,那么还有些别的防护手段。比如
校验X-Requested-With头
。 - 跨域的form表单提交是伪造不了这个ajax请求头。
- 甚至你可以在ajax中使用冷门的put请求,这个也是form表单的请求没能力做到的。
- referer的防护要严格校验host,而不是简单的使用一个字符包含的检查。
企业级CSRF的最佳实践
- 开发的话,
所有的敏感请求都不要用get。
- 对敏感功能进行
来源和token的验证
,最好都验证,一般只验证一个,有很多被突破的可能。 - 如果post是ajax功能的post,那就检验ajax的header头就行了,拒绝所有form表单的post。
- 监控的话,可部署监控日志。
尽管CSRF是web应用的基本问题,而不是用户的问题,但是用户如何才能避免踩入陷阱呢?
- 用户可通过在浏览其它站点前
登出站点或者在浏览器会话结束后清理浏览器的cookie
。
尽量的学习,尽量的尽力, 尽量的旅游,尽量的吃好东西, 人生就比较美好一点,就是这么简单。 – 蔡澜