今天来说说“跨站请求伪造攻击(Cross-site request forgery)”。
跨站请求伪造攻击,简称CSRF攻击。与跨站脚本攻击(Cross Site Scripting,简称XSS)有点类似,其攻击的核心要素都是“欺骗”。区别在于XSS窃取了用户对网站的信任,CSRF则是窃取了服务器对用户浏览器的信任。
CSRF是如何进行攻击的?
较为典型的CSRF攻击例如“银行网站转账”攻击,用户登陆银行A网站完成转账操作后,在浏览器“身份”信息未失效前,攻击者通过某种手段诱使用户打开CSRF攻击B网站,此时B网站可以插入一条经过特殊构造的URL,其中包含A网站的地址与转账命令。而A网站的服务器此时检测到刚刚转完账的用户带着“身份”信息又来了,系统会判定这是本人在操作,同意本次的交易请求。用户在毫不知情的情况下,就被攻击者利用本地信息转走了存款。
CSRF造成的危害还有很多,攻击者能够“欺骗”受害用户完成该受害者所允许的任一状态改变的操作,比如:更新账号细节、完成购物、注销甚至登录等操作。CSRF攻击虽然隐秘,但Web应用防火墙(WAF)防御CSRF攻击有妙招!
WAF防火墙
大家都知道在HTTP报头中有一个Referer字段,字段中记录了HTTP请求的来源地址,正常情况下Referer字段应和请求的地址位于同一域名下。但如果是CSRF攻击传来的请求,Referer携带的地址则会是CSRF攻击网站的地址。
Web应用防火墙可通过验证用户HTTP请求的Referer字段实现对CSRF攻击进行抵御。如果发现访问网站的HTTP请求的Referer字段记录的URL并非原网站的URL,则判定发送该HTTP请求的用户可能遭受攻击者的CSRF攻击,根据CSRF策略的动作处理该HTTP请求。
“道”高一尺,“魔”高一丈?
验证Referer字段过于依赖浏览器发送正确的Referer字段,同时无法保证用户使用的浏览器没有安全漏洞影响导致Referer字段被篡改。
“魔”高一尺,“道”高一丈!
Web应用防火墙可为用户端设置一个伪随机数作为验证的Token信息,Token信息会随客户端提交的请求头传输到服务器进行校验,正常访问时,客户端浏览器可正常获取并传回此伪随机数,而在CSRF攻击中,攻击者无法获取此伪随机数的值,Web应用防火墙就会因校验Token的值为空或者错误,根据CSRF策略的动作处理该HTTP请求。