ASP.NET中無Cookie會話的優(yōu)點與缺點
無Cookie會話的優(yōu)點
在 ASP.NET 中,會話管理和表單身份驗證是唯一的兩個在后臺使用 Cookie 的系統(tǒng)功能。通過無 Cookie 會話,您現(xiàn)在可以部署無論用戶的有關(guān) Cookie 的首選項如何都能正常工作的有狀態(tài)應(yīng)用程序。然而,就 ASP.NET 1.x 而言,仍然需要使用 Cookie 來實現(xiàn)表單身份驗證。好消息是,在 ASP.NET 2.0 中,表單身份驗證可以選擇以無 Cookie 方式工作。
另一個經(jīng)常提出的反對 Cookie 的理由是安全性。這是一個值得予以更多關(guān)注的要點。
Cookies 是無活動能力的文本文件,因此,這些文件可能被攻擊者替換或損壞 — 只要他們獲得了對計算機(jī)的訪問。真正的威脅并不在于 Cookie 可以在客戶端計算機(jī)上安裝什么,而是在于它們可以向目標(biāo)站點上載什么。Cookie 不是程序,并且永遠(yuǎn)不會像程序那樣運(yùn)行;然而,您計算機(jī)上安裝的其他軟件可以使用對 Cookie 的瀏覽器內(nèi)置支持來遠(yuǎn)程從事破壞活動。
此外,Cookie 要受到被盜竊的風(fēng)險。一旦失竊,包含有價值的和私人的信息的 Cookie 就可能將其內(nèi)容泄露給惡意攻擊者,并且為其他類型的 Web 攻擊提供便利??傊?,通過使用 Cookie,您將自己暴露在本可以消除的風(fēng)險之中。這是真的嗎?
無Cookie會話的缺點
讓我們從另一個角度來考察安全性。您是否曾經(jīng)聽說過會話劫持?如果沒有,則請閱讀一下 TechNet Magazine 文章 Theft On The Web: Prevent Session Hijacking。簡單說來,當(dāng)攻擊者獲得對特定用戶的會話狀態(tài)的訪問時,將發(fā)生會話劫持。其實質(zhì)是,攻擊者竊取有效的會話 ID,并且使用它侵入系統(tǒng)和窺探數(shù)據(jù)。獲取有效會話 ID 的一種常見方式是竊取有效的會話 Cookie。鑒于此,如果您認(rèn)為無 Cookie 會話保護(hù)了您應(yīng)用程序的安全,那您就完全錯了。實際上,對于無 Cookie 會話,會話 ID 直接顯示在地址欄中!請嘗試下列操作:
連接到使用無Cookie會話的 Web 站點(例如,MapPoint)并獲得一個映射。此時,該地址存儲在會話狀態(tài)中。
◆抓取 URL(直至頁名稱)。不要包括查詢字符串,但請確保該 URL 包括會話 ID。
◆將該 URL 保存到文件中,并將該文件復(fù)制/發(fā)送到另一臺計算機(jī)。
◆在第二臺計算機(jī)上打開該文件,并將該 URL 粘貼到新瀏覽器實例中。
◆只要會話超時仍然有效,就會顯示同一個映射。
◆通過無Cookie會話,可以比以往任何時候都更加容易地竊取會話 ID。
從道德的觀點來看,竊取會話是應(yīng)該受到譴責(zé)的操作,我相信大家會一致認(rèn)同這一點。但它是否也是有害的?這取決于會話狀態(tài)中實際存儲的內(nèi)容。竊取會話 ID 本身并不會執(zhí)行超出代碼控制范圍的操作。但是,它可能向未經(jīng)授權(quán)的用戶泄露私有數(shù)據(jù),并且使一些壞家伙能夠執(zhí)行未經(jīng)授權(quán)的操作。有關(guān)如何在 ASP.NET 應(yīng)用程序中阻止會話劫持的提示,請閱讀 Wicked Code: Foiling Session Hijacking Attempts。(而且,它并不依賴于無 Cookie 會話?。?
使用無Cookie會話還會引起與鏈接有關(guān)的問題。例如,您不能在 ASP.NET 頁中具有絕對的、完全限定的鏈接。如果您這樣做,那么源自該超鏈接的每個請求都將被視為新會話的一部分。無 Cookie 會話要求您總是使用相對 URL,就像在 ASP.NET 回發(fā)中一樣。僅當(dāng)您可以將會話 ID 嵌入到 URL 中時,您才可以使用完全限定的 URL。但是,既然會話 ID 是在運(yùn)行時生成的,那么您如何才能做到這一點呢?
下面的代碼中斷了該會話:
- < a runat="server" href="/test/page.aspx">Click< /a>
要使用絕對 URL,可以借助于一個小技巧,即,使用 HttpResponse 類上的 ApplyAppPathModifier 方法:
- < a runat="server" href=< % =Response.ApplyAppPathModifier("/test/page.aspx")%> >Click< /a>
ApplyAppPathModifier 方法采用一個表示 URL 的字符串作為參數(shù),并且返回一個嵌入了會話信息的絕對 URL。例如,當(dāng)您需要從 HTTP 頁重定向到 HTTPS 頁時,該技巧尤其有用。最后,請?zhí)貏e注意,每當(dāng)您在同一個瀏覽器內(nèi)部鍵入指向某個站點的路徑時,您都將丟失無 Cookie 會話的狀態(tài)。還要請您注意的是,對于移動應(yīng)用程序,如果設(shè)備無法處理專門格式化的 URL,則無 Cookie 會話可能會出現(xiàn)問題。
【編輯推薦】