什么是CSRF
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。
可以简答的理解:攻击者盗用了你的身份,以你的名义发送恶意请求,然后迫使Web应用的用户去执行攻击者预设的操作。例如,当用户登录支付宝去查看余额,在他没有退出时,就点击了一个QQ好友发来的链接,那么该用户帐户中的资金就有可能被转移到攻击者指定的帐户中。
所以遇到CSRF攻击时,将对终端用户的数据和操作指令构成严重的威胁;当受攻击的终端用户具有管理员帐户的时候,CSRF攻击将危及整个Web应用程序。
CSRF原理
参考资料:https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/09.1.md
参考上图:要完成一次CSRF攻击,受害者必须依次完成两个步骤 :
1.登录受信任网站A,并在本地生成Cookie 。
2.在不退出A的情况下,访问危险网站B。
要完成一个CSRF攻击,必须具备以下几个条件:
受害者已经登录到了目标网站(你的网站)并且没有退出
受害者有意或者无意的访问了攻击者发布的页面或者链接地址
CSRF攻击主要是因为Web的隐式身份验证机制,Web的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的。
CSRF的防范
防范CSRF攻击,其实本质就是要求网站能够识别出哪些请求是非正常用户主动发起的,这就要求我们在请求中嵌入一些额外的授权数据,让网站服务器能够区分出这些未授权的请求。
(1)涉及敏感操作的请求改为POST请求,这个方法可以防范一些CSRF攻击,但是对于进阶攻击就无能为力了,POST请求页可以伪造。
(2)验证码;添加验证码来识别是不是用户主动发起的请求,简单粗暴。
(3)服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数。
Cookie Hashing(所有表单都包含同一个伪随机值):因为攻击者不能获得第三方的Cookie(理论上),所以表单中的数据也就构造失败了
(4)请求来源限制验证 HTTP Referer 字段
方法:在HTTP请求头中有一个字段叫Referer,它记录了请求的来源地址。 服务器需要做的是验证这个来源地址是否合法,如果是来自一些不受信任的网站,则拒绝响应。
总结
CSRF,是一种非常危险的Web安全威胁,现在知道造成这种攻击的原因所在,不管如何,我们都要尽最大的努力去将攻击者拦截在门外。作为一个web开发人员,了解这些安全知识还是非常重要的!