2012-04-25 38 views
7

我使用的會話cookie(而不是永久性)保存用戶ID知道,如果用戶登錄。是否有足夠的會話cookie來存儲用戶ID?

基本上,用戶登錄時,我們檢查的憑據,然後設置一個會話cookie的用戶ID = 37(這個特定的用戶,其他用戶將有73或69等)

Session.Add("UserID", 37); 

我的問題是,是否有可能登錄的用戶到該會話cookie以某種方式改變從37到73並因此欺騙服務器認爲他實際上是用戶73? 如果是,那麼我在做什麼錯,如何處理這種情況?它似乎瘋了放在會話用戶名和密碼哈希,並檢查他們每次?

我們也是後來使用的查詢,這個用戶ID值來限制他們。

我很抱歉,如果這不是一個確切的代碼的問題,但它是非常相關的我的代碼。

回答

6

會話cookie只包含會話ID。它用於識別用戶。它僅包含其他內容。此會話的實際信息存儲在服務器上。所以這是安全的。用戶永遠不能更改已存儲在服務器上的值。如果您將此存儲在會話中,則用戶無法更改其ID。

這就是說,與用戶ID打交道時,你可以考慮使用forms authentication跟蹤驗證的用戶,而不是與會話重塑車輪。

+0

哦。我懂了。你是如此的正確。我完全忘記了這一點。對於快速的答案thnx很多。我必須等12分鐘才能接受,但我會。 – b0x0rz 2012-04-25 14:12:20

+0

如果該值存儲在服務器上,則當客戶端關閉瀏覽器時會話實際上被刪除,還是僅僅是密鑰? (不知道我是否使用了正確的名字) – BjarkeCK 2012-12-01 15:10:31

+0

@BjarkeCK,關鍵在客戶端。在一個cookie中。會話cookie不是持久的,所以當用戶關閉瀏覽器時,cookie將會丟失。另一方面,該值將繼續存在於服務器上,直到它被垃圾收集爲止。 – 2012-12-01 17:11:55

2

這不是cookie,並且是完全安全的,因爲它不能被用戶改變。在cookie中存儲在服務器端的唯一東西是會話ID。

3

ASP.NET會話狀態相比客戶端狀態管理技術提供了一個重要的安全優勢,因爲的實際狀態存儲在服務器端,而不是沿着HTTP請求路徑在客戶端和其他網絡實體上公開。但是,爲了維護應用程序安全性,需要考慮會話狀態操作的幾個重要方面。 安全最佳實踐可分爲三大類:防止會話ID欺騙和注射,在後端固定狀態存儲,並確保在專用或共享環境中的會話狀態部署的安全性。

閱讀:Securing Session State

+0

是的,所有涵蓋:)希望;) – b0x0rz 2012-04-25 14:25:45

0

至於其他的答案已經注意到,實際值(37中的例子)存儲在服務器,而不是客戶端,但是,這並不意味着你是免疫潛在的攻擊。這種機制仍然容易受到跨站點腳本攻擊。基本上,存儲在客戶端Cookie上的是一些很長的標識符。如果除實際用戶以外的人獲得該標識符的標識,他們可以將其放入他們自己的cookie中,並基本上假裝爲該用戶。您可以自行研究跨站點腳本(我不是這方面的專家),以查看惡意用戶嘗試查看其他用戶的Cookie並嘗試將其設置爲自己的一些常見方式,以及防禦此類攻擊的方法(其中一些我肯定會通過瀏覽器和ASP爲您完成)。

相關問題