簡體   English   中英

在登錄時生成新的SessionID(ASP.NET)

[英]Generating a new SessionID on Login (ASP.NET)

我正在嘗試在相當大的ASP.NET Web應用程序(C#)上處理許多安全問題。 為了防止會話固定攻擊,我想在每次用戶驗證自己時生成一個新的會話ID。 但是我想只生成一個新的會話ID而不會丟失會話的其余部分。 在對這個主題做了一些研究后,我找到了幾個有效的解決方案:

解決方案1: 在ASP.NET中生成新的SessionId
這表示通過將會話cookie設置為空字符串來手動清除會話cookie。 但是,這需要頁面刷新或使用AJAX來確保cookie確實被刪除,這在我的特定情況下不是真正可行的選項。

解決方案2: 在當前HTTPContext中生成新的ASP.NET會話
我已經實現了這種方法,它按預期工作。 然而,正如原始海報所述,這並不是你所謂的優雅解決方案。 此外,這篇文章還有幾年歷史,我希望現在可能有更好的解決方案。

我想知道的是,如果有任何替代方法可以做到這一點,我在研究中錯過了,或者在沒有操作會話管理內部的情況下可以使用解決方案2。

由於會話管理在ASP.NET中的設計如何工作,解決方案編號為2,實現您想要的並不是那么容易。考慮到ASP.NET會話狀態實現細節在某些時候發生變化,解決方案(2)似乎有點冒險。

我建議使用解決方案1的變體,在用戶進行身份驗證時,將會話中的相關數據存儲到db / cache,為用戶獲取新會話,然后使用所需數據填充該會話。 由於數據正在從“未經身份驗證”的會話轉移到“經過身份驗證”的會話,因此您還應該注意驗證該數據。

手動清除會話cookie可能是一個滑坡,重新加強ASP.NET會話安全性 您將在NWebsec.SessionSecurity的經過身份驗證的會話標識符中找到更強大的解決方案(免責聲明:我是該項目的開發人員)。

Web.Config更改sessionState cookieName =“ABC”

在塊中的Login.aspx頁面中!ispostback寫入

Response.Cookies.Add(new HttpCookie(“ABC”,“”));

請享用

- 節省時間!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM