系统漏洞浏览器
描述安全
CSRF(Cross-Site Request Forgery,跨站点伪造请求)是一种网络攻击方式,该攻击能够在受害者绝不知情的状况下以受害者名义伪造请求发送给受攻击站点,从而在未受权的状况下执行在权限保护之下的操做,具备很大的危害性。具体来说,能够这样理解CSRF攻击:攻击者盗用了合法用户的身份,以合法用户的名义发送恶意请求,对服务器来讲这个请求是彻底合法的,可是却完成了攻击者所指望的一个操做,好比以你的名义发送邮件、发消息,盗取你的帐号,添加系统管理员,甚至于购买商品、虚拟货币转帐等。服务器
防护网络
CSRF漏洞防护主要从服务端和用户端两个层面进行。工具
一、服务端的防护学习
目前主要防护CSRF攻击主要有三种策略:验证HTTP Referer字段,在请求地址中添加token并验证,在HTTP头中自定义属性并验证。网站
1)验证HTTP Referer字段spa
根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在一般状况下,访问一个安全受限页面的请求必须来自于同一个网站。csrf
好比某银行的转帐是经过用户访问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
2)在请求地址中添加token并验证
CSRF攻击之因此可以成功,是由于攻击者能够伪造用户的请求,该请求中全部的用户验证信息都存在于Cookie中,所以攻击者能够在不知道这些验证信息的状况下直接利用用户本身的Cookie来经过安全验证。由此可知,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,而且该信息不存在于Cookie之中。鉴于此,系统开发者能够在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端创建一个拦截器来验证这个token,若是请求中没有token或者token内容不正确,则认为多是CSRF攻击而拒绝该请求。
3)在HTTP头中自定义属性并验证
自定义属性的方法也是使用token并进行验证,和前一种方法不一样的是,这里并非把token以参数的形式置于HTTP请求之中,而是把它放到HTTP头中自定义的属性里。经过XMLHttpRequest这个类,能够一次性给全部该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。这样解决了前一种方法在请求中加入token的不便,同时,经过这个类请求的地址不会被记录到浏览器的地址栏,也不用担忧token会经过Referer泄露到其余网站。
二、用户端的防护
对于普通用户来讲,都学习并具有网络安全知识以防护网络攻击是不现实的。但若用户养成良好的上网习惯,则可以很大程度上减小CSRF攻击的危害。例如,用户上网时,不要轻易点击网络论坛、聊天室、即时通信工具或电子邮件中出现的连接或者图片;及时退出长时间不使用的已登陆帐户,尤为是系统管理员,应尽可能在登出系统的状况下点击未知连接和图片。除此以外,用户还须要在链接互联网的计算机上安装合适的安全防御软件,并及时更新软件厂商发布的特征库,以保持安全软件对最新攻击的实时跟踪。