2009-04-23 43 views
6

我們注意到,它可能重新在另一臺機器上的ASP.NET FormsAuthentication餅乾的副本,可讓第二臺機器,而無需登錄驗證。可以通過將ASP.NET FormsAuthentication Cookie與會話ID相關聯來使其更安全嗎?

提出的一種解決方案,這已經存儲會話ID在FormsAuthenticationTicket.UserData之內,並檢查兩個值是否匹配Application_AuthenticateRequest()

我們使用:

FormsAuthenticationTicket.IsPersistent = false; 

是FormsAuthentication的Cookie與會話ID是一個好主意關聯的這種做法?

+0

這事,你實際上已經試過嗎?您實際上是否有另一臺機器使用另一臺機器的cookie登錄?我認爲有一些每會話加密。 – 2009-04-23 13:51:37

+0

一位同事試過了。我不知道是否有加密配置。 – tjrobinson 2009-04-23 14:08:16

回答

18

我認爲你得太多被這個問題。複製cookie的能力只是cookie的固有問題 - 任何人都可以截取cookie並通過在另一臺機器上設置它來模擬其中的任何數據。

的身份驗證cookie的「安全性」來自於一個事實,沒有人可以(據說)手藝用手cookie來僞造一個身份驗證的用戶。但是,一旦創建了cookie,當然它可以用於身份驗證。這意味着爲了您的「問題」發生,您仍然需要首先有一個有效的用戶登錄。如果該用戶通過將他的cookie複製到其他機器以允許所有人訪問來濫用該系統,則與用戶只是告訴所有人她的用戶名和密碼完全相同,除非更爲呆板。因此,問題不在於cookie的複製 - 而是用戶自己。但同樣,這是固有的餅乾自己 - 如果網絡被攻破,有人可以攔截信息流通過嗅探器或任何拼湊餅乾

另一種攻擊向量會。這被稱爲會話劫持,而防止這種情況的唯一方法是在您的網站上使用SSL。

如果您真的擔心它,我只需將您的身份驗證和會話超時設置爲相同,然後在您的global.asax文件中,只要用戶的會話過期,就調用FormsAuthentication.Signout()。這會在用戶完成會話時使認證失效,並強制他們稍後再次登錄。當然,這可能是一個極端的煩惱你的用戶...

我也強烈建議This MSDN article。它可能比我能更好地回答你的問題。

相關問題