基础知识:CSRF漏洞

CSRF漏洞概述
  CSRF漏洞是跨站请求伪造攻击,能够对攻击用户的增、删、改,不能攻击查。为什么呢?根据其原理,攻击者是发一个链接给用户,用户点击这个链接而执行危险的操作,信息并不会返回到攻击者的电脑上去。在CSRF攻击里面,攻击者通过用户的浏览器来注入额外的网络请求,来破坏一个网站会话的完整性。而浏览器的安全策略是允许当前页面发送到任何地址的请求,因此也就意味着当用户在浏览他无法控制的资源时,攻击者可以控制页面的内容来控制浏览器发送它精心构造的请求。
 
 
 
CSRF漏洞攻击原理
     CSRF攻击原理相对来说比较容易理解,举个例子,WebA为存在CSRF漏洞的网站,WebB为攻击者的恶意网站,UserA为WebA网站的合法用户。当UserA打开浏览器,访问WebA,并且输入用户名和密码来登录WebA。在用户通过信息验证后正常登陆,WebA会产生一个Cookie信息返回给浏览器,此时网站WebA登陆成功,UserA可以正常发送请求到WebA,但是当用户未退出WebA之前,在同一个浏览器上打开另一个页面访问WebB,WebB接到用户访问请求,返回一些攻击性代码,并发出一个请求要访问WebA。当浏览器接到这些攻击代码后,根据WebB的请求,在UserA的不知情的情况下携带Cookie信息,向WebA发出请求,这时WebA并不知道这是WebB请求的,所以会根据UserA的Cookie信息以UserA的权限处理请求,导致WebB网站的恶意代码被执行,实现CSRF漏洞攻击。
 
 
 
CSRF漏洞攻击防范措施
   根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站。比如某银行的转账是通过用户访问http://bank.test/test?page=10&userID=101&money=10000页面完成,用户必须先登录bank.test,然后通过点击页面上的按钮来触发转账事件。当用户提交请求时,该转账请求的Referer值就会是转账按钮所在页面的URL(本例中,通常是以bank. test域名开头的地址)。而如果攻击者要对银行网站实施CSRF攻击,他只能在自己的网站构造请求,当用户通过攻击者的网站发送请求到银行时,该请求的Referer是指向攻击者的网站。因此,要防御CSRF攻击,银行网站只需要对于每一个转账请求验证其Referer值,如果是以bank. test开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果Referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求。
 
  在请求地址中添加token并验证,CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,该请求中所有的用户验证信息都存在于Cookie中,因此攻击者可以在不知道这些验证信息的情况下直接利用用户自己的Cookie来通过安全验证。由此可知,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,并且该信息不存在于Cookie之中。鉴于此,系统开发者可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。
 
  在HTTP头中自定义属性并验证,自定义属性的方法也是使用token并进行验证,和前一种方法不同的是,这里并不是把token以参数的形式置于HTTP请求之中,而是把它放到HTTP头中自定义的属性里。通过XMLHttpRequest这个类,可以一次性给所有该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。这样解决了前一种方法在请求中加入token的不便,同时,通过这个类请求的地址不会被记录到浏览器的地址栏,也不用担心token会通过Referer泄露到其他网站。
 
 

posted @ 2019-09-06 11:38  Redhskb  阅读(269)  评论(0编辑  收藏  举报