2009-10-23 48 views
2

我正在爲我的新主頁開發我的登錄。ASP.Net中的Int-UserID和Session不安全?

現在我發現,我必須在瀏覽器的會話變量中保存類似userID(或其他可以識別我的用戶的值)的內容。

此刻我使用INT作爲用戶ID。

因此,將用戶標識放入會話中不安全嗎?

E.g.當我編輯我的會話變量手冊從用戶ID 111到用戶ID 112時,比我以完整的其他用戶身份登錄?

回答

2

是的,僅依靠用戶ID是不安全的。

您可能希望添加服務器生成並記憶的唯一身份驗證令牌。也是一個非常簡單的解決方案,但它將停止操作用戶ID,因爲無法猜測其他用戶的身份驗證令牌的正確值。

還需要同時提交的用戶ID和對應的認證令牌在每個請求到在服務器側被共同驗證,執行所請求的操作之前。

P.S.如果您將此信息存儲在客戶端可訪問且可操作的cookie中,則上述內容適用。視圖狀態(以頁面序列化)也可以被操縱。會話集合是服務器端變量,它在客戶端上不可用,因此無法操作。在這種情況下,你的用戶ID應該是安全的。

我會建議你實現雙系統:存儲用戶ID和無論是在餅乾和會話令牌,並使用相同的驗證邏輯(簡單)。如果Cookie被禁用,您將自動回退到使用會話而不更改您的代碼。

+0

那是一個很不錯的主意,我想。 每個請求驗證都已準備好。 不是帶會話令牌和用戶ID的簡單表格,對嗎?並在登錄成功之前比較此。 – Kovu 2009-10-23 09:12:54

+1

當用戶嘗試登錄時,您將驗證用戶名/密碼併發出保留在某處的唯一驗證令牌(在會話/ cookie中)。在以後的任何請求中,您都會檢查用戶名/令牌對並查看它們是否匹配。如果他們這樣做,則繼續執行請求的操作,否則拒絕訪問並重定向到登錄頁面。 – 2009-10-23 09:20:33

+0

是的,這就是我所理解的,但我的問題是,在數據庫表中安全使用usserID /令牌對以進行比較是合理的並且安全的? – Kovu 2009-10-23 09:25:28

1

會話變量未存儲在瀏覽器中,它存儲在Web服務器上。 (通常無論如何。)
表示要使用哪個會話變量的令牌存儲在瀏覽器中。

所以存儲在會話變量中的用戶ID是好的,因爲用戶直接擁有這個用不上。

如果用戶要將會話令牌更改爲另一個,那將是一個問題,但他們需要首先了解其他令牌。 (我不知道如何自己做。)。 (你可以通過使用加密或IPAddresses等其他標識進一步減少這種情況,這確實是你需要你的網站有多安全嗎?)。

此外,如果您的站點需要用戶登錄,建議使用https/SSL。

0

正如Bravax所說,用戶無權訪問會話變量(它們有權訪問的Cookies)。

如果你在所有的擔心,因爲它們不是連續的,幾乎是不可能的猜測我會用一個GUID來代替。

另外,你有沒有看過內置的.Net認證的東西?看看FormsAuthentication。

HTH, 哈利