对于web客户端的攻击,除了首当其冲的XSS以外,CSRF也是一个非常重要的安全漏洞。
CSRF漏洞是跨站请求伪造,也有少数文章中称其XSRF,其实指的是同一个东西。
这个漏洞的原理要分两层,狭义的CSRF和广义的CSRF。
狭义的CSRF是指在黑客已经将代码植入受害用户的浏览器访问的页面的前提下,以“受害用户”的身份向服务端发起一个伪造的http请求,从而实现服务器CURD来执行读写操作。
这就是绝大多数博客,以及《白帽子讲web安全》一书中道哥所提到的CSRF漏洞的执行方式。
既然有狭义,也要说说广义的CSRF。本质上讲,CSRF漏洞就是黑客将一个http接口中需要传递的所有参数都预测出来,然后不管以什么方式,他都可以根据他的目的来任意调用你的接口,对服务器实现CURD。
所以说,其实CSRF并不一定非要借助受害用户的浏览器,黑客可以自己写脚本伪造出一个和真实的http请求一模一样的数据包发给你的服务器,前提是你的这个http接口中的所有参数都是可以预期的。
需要说明的是,对于广义的CSRF,是我自己的理解,在这一点上可能与书本上所讲的内容存在一些出入。
狭义的CSRF的原理很简单,实现难度也不大,无非就是写两行javascript代码的ajax调用一下服务端的rest接口。
但是实现CSRF的关键在于,要么先找到一个xss漏洞,然后将黑客的恶意代码植入到页面中去的前提下才可以实现狭义的CSRF;要么构造出一个url,将参数设好,然后把url贴在网络上像反射型XSS那样骗用户访问这个url。
讲到这里,其实不难发现,CSRF和XSS这两个漏洞一旦结合起来,将会爆发出巨大的威力。那么对于CSRF应该如何防御?
注:原创技术文章,为避免未经许可的匿名转载,全部文章内容请移步原文阅读,带来的不便敬请谅解。