session介紹
因為HTTP通信使用許多不同的TCP連接砍的,Web服務(wù)器需要一個方法來識別每個用戶的連接痪署。最有用的方法是當(dāng)一個客戶端成功認(rèn)證后,該Web服務(wù)器向該客戶端瀏覽器發(fā)送令牌悼沿。Session令牌通常由可變長度的字符串組成鳞芙,并且它可以以不同的方式存儲,如在URL中卫玖,在HTTP請求的cookie報頭中(request header)公你,或在HTTP請求中的其它報頭中,或者在HTTP請求的主體中假瞬。
登錄
客戶端發(fā)送登錄請求
服務(wù)器接收請求陕靠,驗證登錄,成功后為此web用戶開辟一個私密空間脱茉,存放登錄信息
服務(wù)器為這個私密空間編號剪芥,類似于PHPSESSID=rcmjnke6er5pnvf3qof0lclca7這樣的一個鍵值對,不同的語言生成的鍵名和值的規(guī)則不同琴许,但是都本著兩個原則:第一粗俱,value必須唯一,畢竟一個站點(diǎn)可能同時有數(shù)百萬甚至更多用戶在訪問虚吟,不能讓兩個用戶的表示一樣寸认;第二:生成的value必須是不可推測的,否則別有用心用戶就可以根據(jù)自己的表示信息推斷出別人的串慰,然后偽造別人登錄信息訪問站點(diǎn)(這正是session劫持)偏塞。
服務(wù)器把這個鍵值對寫入http響應(yīng)中傳給客戶端
客戶端接收響應(yīng),關(guān)閉連接
登錄成功邦鲫,用戶訪問其他頁面
客戶端發(fā)送登錄請求(服務(wù)器寫到cookie中的用戶標(biāo)識信息也被發(fā)送)
服務(wù)器讀取http請求中的cookie信息灸叼,根據(jù)標(biāo)識信息查找對應(yīng)私密空間,讀取用戶信息
服務(wù)器生成特定響應(yīng)庆捺,發(fā)送給客戶端
客戶端接收響應(yīng)古今,關(guān)閉連接
session劫持
session劫持攻擊通過竊取或預(yù)測有效的Session令牌來獲得未經(jīng)授權(quán)Web服務(wù)器訪問權(quán)限。
Session 代理人劫持
在下面這個例子中滔以,我們可以看到捉腥,第一個攻擊者使用代理來捕捉一個有效的session令牌稱為“SessionID”,然后他使用該有效session令牌獲得未經(jīng)授權(quán)的Web服務(wù)器訪問權(quán)限你画。
跨站點(diǎn)腳本攻擊
攻擊者可以通過在客戶端上運(yùn)行惡意代碼來獲取Session令牌抵碟。這個例子說明了如何攻擊者可以利用XSS攻擊竊取session令牌。如果攻擊者發(fā)送惡意的JavaScript代碼到受害人訪問網(wǎng)站中或當(dāng)受害者點(diǎn)擊鏈接時坏匪,JavaScript將運(yùn)行攻擊者的注入腳本拟逮。如圖中所示,它可以顯示當(dāng)前Sessioncookie的值;使用相同的技術(shù)則可能將此Session發(fā)送給攻擊者适滓。
<SCRIPT>alert(document.cookie);</SCRIPT>
防范session劫持
過濾用戶輸入敦迄,防止XSS漏洞
設(shè)置sessionId的cookie為HttpOnly,使客戶端無法獲取
使用https協(xié)議