一、CSRF攻击原理
CSRF攻击原理比较简单,如图1所示。其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。
图1 CSRF攻击原理
1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
总的来说,它就是利用cookie,来盗取用户权限,从此进行操作。
cookie有session和local两种。前者是临时的,会话关闭之后就没有了,后者是保存在本地的,当缓存过期之后才消失。
二、CSRF防御
CSRF为什么能够攻击成功呢?其本质原因是重要操作的所有参数都是可以被攻击者猜测到的。
攻击者只有预测出URL的所有参数与参数值,才能成功地构造一个伪造的请求,反之,攻击者将无法攻击成功。出于这个原因,可以想到一个解决方案:把参数加密,或者使用一些随机数,从而让攻击者无法猜测到参数值。
1.验证码。由于CSRF的攻击点在于浏览器分不清是用户发送的数据还是攻击者发送的数据,所以每次提交重要信息都要求输入验证码,这样可以保证信息是安全的。
2.服务器随机生成一个token发送,这样在请求中的cookie中要是有匹配的token,就认为是安全的请求,否则就可能有安全问题。但是token要建立在没有XSS漏洞的基础上,如果有XSS漏洞,那么攻击者通过获得页面,同样可以从cookie中获得token然后进行模拟操作。