2013-07-09 27 views
6

我試圖在一個相當大的ASP.NET Web應用程序(C#)上工作一些安全問題。爲了防止會話固定攻擊,我希望每次用戶驗證自己時都生成一個新的會話ID。但是,我只想生成一個新的會話ID而不會丟失會話的其餘部分。關於這個話題做一些研究之後,我發現一對夫婦工作的解決方案:在登錄時生成一個新的SessionID(ASP.NET)

解決方案1:Generating new SessionId in ASP.NET
這表明通過將其設置爲空字符串手動清除會話cookie。但是,這需要頁面刷新或使用AJAX來確保cookie確實會被刪除,在我的具體情況下這不是一個真正可行的選項。

解決方案2:Generating a new ASP.NET session in the current HTTPContext
我已經實現了這種做法,它按預期工作。然而,正如原始海報所述,這並不是你可能稱之爲優雅的解決方案。此外,這個職位已經有幾年了,我希望現在可能會有更好的解決方案。

我想知道的是,如果有任何替代方案可以做到這一點,那麼我在研究中錯過了,或者如果解決方案2可能沒有操縱會話管理內部組件。

+1

我與你和AFAIK有同樣的問題,solution2與solution1基本相同,都嘗試爲當前httpcontext重新生成一個新的sessionid。 終於我找到了這個鏈接:http://stackoverflow.com/questions/5502435/regenerate-sessionid-in-asp-net,並做到了成功。這是一個更簡單的方法來解決這個問題。 – pinopino

+0

最後,有沒有什麼辦法可以解決你的問題?還是你解決了自己?請分享您的解決方案,讓每個人都可以獲得更多知識。 XD –

回答

4

由於會話管理在ASP.NET中的設計如何工作,因此解決方案編號爲2,要實現您想要的並不容易。解決方案(2)似乎有點冒險,因爲ASP.NET會話狀態實現細節在有一點。

我推薦了一個解決方案1的變種,在用戶認證時,將相關數據從會話存儲到db/cache,爲用戶獲取新會話,然後用您需要的數據填充該會話。由於數據正從「未認證」會話轉移到「已認證」會話,因此您應該注意驗證該數據。

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

0

的Web.Config改變 的sessionState cookieName = 「ABC」

在頁面的Login.aspx塊!的IsPostBack寫

Response.Cookies.Add(新的HttpCookie( 「ABC」, 「」)) ;

享受

- 節省時間!

+0

能否詳細說明這種方法?是什麼使這項工作? – Kristopher

+0

理想情況下,它在登錄後立即創建一個具有給定名稱的新sessionid,您可以在chrome開發人員工具中查看資源選項卡cookie。因此黑客難以重複使用同一個會話。 –