2012-10-03 59 views
0

我正在使用ASP.Net MVC3和IIS 7.0。在我的網站上,我通過https實現了表單身份驗證(requireSSL =「true」)。我爲.ASPXAUTH cookie設置了一些到期日期(例如5天)。所有作品都很好,但是在成功從一個瀏覽器登錄後,我可以將Cookie(.ASPXAUTH)複製到另一臺瀏覽器或另一臺計算機上,並且無需登錄名和密碼即可進入我的網站。ASP.NET MVC 3表單身份驗證安全風險

我該怎麼做,以便我只能從瀏覽器或我輸入登錄密碼的計算機訪問站點,並且無法從其他瀏覽器訪問,我在其上覆制了.ASPXAUTH cookie?

由於提前,Olexiy

+0

這是怎麼回事任何超過到電腦的人越來越訪問該用戶已經登錄和安全風險,通過其Web瀏覽器訪問您的網站。如果他們有權訪問cookie,那麼他們也可以訪問Web瀏覽器並進入。在我看來,風險並不在於複製cookie。風險是你已經在cookie上設置了這麼長的期限。 –

+0

謝謝凱文。但是,例如,Google已經爲Gmail實施了這個功能。你知道他們是怎麼做到的嗎? –

+0

Google爲其所有應用程序和第三方應用程序使用OAuth和OpenID。您可以保持登錄Google帳戶,但我沒有驗證您無法複製Cookie。如果您無法從Google帳戶複製Cookie,那麼他們可能使用了@Zoltan暗示的技術。但是,正如我和季米特洛夫所說的那樣,複製cookie沒有風險。 –

回答

4

你不能做到這一點與窗體身份驗證。表單身份驗證的整個概念是它依賴於客戶端上的cookie來跟蹤經過身份驗證的用戶。這不應該成爲你的擔憂,因爲所有主要網站都以這種方式工作 - 如果你有一個有效的cookie,客戶端瀏覽器不再重要。你甚至不需要使用瀏覽器。您可以編寫一個控制檯應用程序,向您的站點發送HTTP請求並根據此請求發送Cookie,並且用戶仍將通過身份驗證。

有沒有風險,你應該關心。您已經通過啓用SSL來完成必要的操作,這意味着此cookie永遠不會通過未加密的通道發送。

+0

謝謝你的回答,Darin。你知道如何使用ASP.NET MVC3來做到這一點嗎?也許用自定義驗證。 –

+0

您可以將客戶端IP地址,用戶代理等組合的哈希值存儲在表單身份驗證Cookie的用戶數據部分中,然後編寫一個自定義的授權屬性,以便驗證它們是否匹配。不是100%的防水解決方案,儘管這些標頭可能是僞造的。 –

+0

謝謝你的回答,Darin。例如,谷歌已經爲Gmail實現了這一點。你知道他們是怎麼做到的嗎? –

0

可以包括用戶代理的哈希值,並在身份驗證cookie中的客戶端的IP地址(請參閱ASP.Net Store User Data in Auth Cookie爲你怎麼能去一些信息)。

謹防移動瀏覽器和代理 - 在漫遊網絡上的用戶可以更改IP地址非常頻繁,並且代理將呈現一個IP爲多個用戶。在這兩種方式中,像我一樣,用戶可能會從家庭Wi-Fi移動到移動網絡,然後通過代理服務器轉移到公司Wi-Fi,並且您將會有相當頻繁地退出登錄的人員。結合用戶代理散列也意味着安裝操作系統或瀏覽器更新的客戶端也可以簽出它們。

爲什麼不走,而不是兩個餅乾:一種是持久的,其標識用戶,而另一個會話只和跟蹤用戶是否已簽署了關於這次訪問的?然後你做一些像亞馬遜這樣的事情 - 需要登錄任何涉及金錢的事情,或者更改/查看個人數據。當他們登錄時,您也可以刷新auth cookie。

也就是說 - 實事求是地講,在auth餅乾的複製其實是一個相當低風險 - 特別是如果你有超時設置爲只有幾天。如果有人陷入了蠕蟲/黑客/小偷可以訪問身份驗證cookie的情況,那麼他們已經有了更大的問題。

+0

謝謝你的回答,安德拉斯。例如,谷歌已經爲Gmail實現了這一點。你知道他們是怎麼做到的嗎? - –