CSRF攻击和防御
CSRF攻击
CSRF 英文全称是 Cross-site request forgery,所以又称为“跨站请求伪造”,是指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。简单来讲,CSRF 攻击就是黑客利用了用户的登录状态,并通过第三方的站点来做一些坏事。
如下为一个简单的攻击流程。 1)假设用户打开了一个银行网站,并且登录了 2)登录成功后,会返回一个cookie给前端,浏览器将cookie保存下来 3)用户在没有登出银行网站的情况下,在当前浏览器又新打开多了一个选项卡,访问了一个危险的网站 4)这个网站有个危险的超链接,这个超链接指向了银行网站 5)用户点击这个超链接,由于这个超链接会自动携带上cookie,所以用户不知不觉在点击这个超链接的时候,还要一些请求是发到了银行网站那里去。
有漏洞的网页:
发送GET请求
发送 POST 请求
|
|
如果原网页是post请求,则通过表单直接进行CSRF攻击。
引诱用户点击链接
这种方式通常出现在论坛或恶意邮件上。黑客会采用很多方式去诱惑用户点击链接。
再来学习一个案例。
在 2007 年的某一天,David 无意间打开了 邮箱中的一份邮件,并点击了该邮件中的一个链接。过了几天,就发现他的域名被盗了。不过几经周折还是要回了他的域名,也弄清楚了域名之所以被盗,就是因为无意间点击的那个链接。
那么域名是怎么样被盗的呢?
- 首先 David 发起登录邮箱请求,然后 Gmail 服务器返回一些登录状态给浏览器,这些信息包括了 Cookie、Session 等,这样在浏览器中,Gmail 邮箱就处于登录状态了。
- 接着黑客通过各种手段引诱他去打开链接,比如hacker.com,然后在 hacker.com 页面中,黑客编写好了一个邮件过滤器,并通过 Gmail 提供的 HTTP 设置接口设置好了新的邮件过滤功能,该过滤器会将他所有的邮件都转发到黑客的邮箱中。
- 最后的事情很简单了,因为有了 David 的邮件内容,所以黑客就可以去域名服务商那边重置David 域名账户的密码,重置好密码之后,就可以将其转出到黑客的账户了。
如何防止 CSRF 攻击
了解了 CSRF 攻击的一些手段之后,我们再来看看 CSRF 攻击的一些“特征”,然后根据这些“特征”分析下如何防止 CSRF 攻击。下面是我总结的发起 CSRF 攻击的三个必要条件:
1、目标站点一定要有 CSRF 漏洞; 2、用户要登录过目标站点,并且在浏览器上保持有该站点的登录状态; 3、需要用户打开一个第三方站点,可以是黑客的站点,也可以是一些论坛。
满足以上三个条件之后,黑客就可以对用户进行 CSRF 攻击了。这里还需要额外注意一点,与 XSS 攻击不同,CSRF 攻击不会往页面注入恶意脚本,因此黑客是无法通过 CSRF 攻击来获取用户页面数据的;其最关键的一点是要能找到服务器的漏洞,所以说对于 CSRF 攻击我们主要的防护手段是提升服务器的安全性。
使用Origin Header确定来源域名
使用Referer Header确定来源域名
CSRF Token
双重Cookie验证
CSRF测试
继续详细学习资料:[ 前端前端安全系列(二):如何防止CSRF攻击?