2012-08-03 161 views
8

當我們在任何ASP.NET框架(ASP.NET MVC,Web窗體等)中使用ASP.NET窗體身份驗證時,我們將身份驗證Cookie保存在客戶端的瀏覽器中。作爲最佳做法,我們將Cookie設置爲HttpOnly並保密。我們還通過SSL進行所有交易。無論我們使用哪種機制對用戶進行身份驗證(OAuth,ASP.NET會員提供程序等),我們仍然需要持續進行身份驗證才能獲得更好的用戶體驗。ASP.NET窗體身份驗證和持久性身份驗證Cookie安全

隨着所有這些,我假設有人仍然可以從客戶端瀏覽器獲取cookie並使用這些auth cookie值發出請求。這不能被服務器檢測到,我們會將受保護的數據提供給其他人。

一個人想到要降低風險,這裏是每當他/她嘗試採取一些嚴肅的行爲(例如更改電子郵件地址,訪問個人資料信息等)時詢問客戶的密碼,但是這個沒有解決任何問題,可能會讓客戶非常討厭。

您是否有任何方法可以針對此類問題積極處理?或者什麼是在客戶端瀏覽器中堅持認證的最佳方式?

回答

5

你幾乎完全正確地使用。

如果您使用的是成員資格提供程序,那麼該cookie將僅標記爲HTTP(如您所說),因此無法通過客戶端腳本(如惡意的XSS)訪問該Cookie。

如果您已將cookie標記爲安全,那麼我假設您已將表單auth上的「RequireSSL」標誌設置爲true。通過這樣做,cookie不會發送到服務器的任何請求中,這些請求不會通過HTTPS傳出,因此,即使您意外地插入了HTTP請求(如果瀏覽器內容嵌入在瀏覽器中,它仍然會警告用戶一個HTTPS頁面),cookies不會被髮送。

你可以做的唯一的其他事情 - 這不能提供很多的防禦,但它是一個很好的做法 - 也是使用HSTS。我在OWASP Top 10 for .NET developers part 9: Insufficient Transport Layer Protection中討論了這一點,作爲確保請求繼續通過安全通道發送的附加手段。

對進入會員供應商進行一些認真的重新設計之後,真的沒有什麼可以做的了。您可以將會話綁定到IP,並且如果請求發生更改,則不會接受請求,但這可能會導致問題(即IP發生變化,並且不會保護您免受同一地址上的多個人的影響)。您還可以創建瀏覽器的指紋(即請求標頭中發送的所有內容)並確保後續請求匹配,但我們將在此處詳細討論。

最終,安全性應該根據其所保護的資產的價值以及惡意活動的可能性而定製。你不會說什麼它是你所保護的,但如果它是一個金融系統,你將會比在博客上使用一個簡單的評論引擎更加長久。

總之,看起來你做得很好,只要考慮你在保護的價值背景下實施的措施是否合適。哦 - 如果您使用SQL成員資格提供程序進行憑證存儲,請確保您讀取Our password hashing has no clothes,然後停止執行此操作!

+0

感謝特洛伊,非常好的回答和很好的建議。我應該承認,我忽視了將'slidingexpiration'設置爲'false'。我假設這使得過期票不能重新激活。這也給系統增加了一個信心。你怎麼看? – tugberk 2012-08-03 09:36:31

+0

滑動過期在啓動時的作用是將會話超時應用於*上次請求*,但當它關閉時,會將其應用於*會話的開始*。假設你有20分鐘的超時時間,並積極使用系統10分鐘。當滑動到期時間爲*時,超時將在30分鐘後發生。當它關閉*超時將發生在20分鐘。關閉它會減少劫持帳戶的機會窗口,但會對可用性產生不利影響。如果你的系統是人們進入的系統,那就快速做他們需要的東西,然後離開,把它關掉。 – 2012-08-03 10:05:46

+0

然後,無論哪種方式,過期的auth cookie都無法使用並重新激活,對吧? – tugberk 2012-08-03 10:13:48

1

您已經在使用HTTPS並加密了相當安全的cookie。

如果您仍然擔心,我會建議在服務器上存儲關於用戶會話的其他信息(IP地址,用戶代理等),並根據會話期間提供的信息驗證該信息。

如果用戶更改其電子郵件地址,您可以將撤銷鏈接發送至原始電子郵件地址,因此如果此更改未經授權,則會向真正的所有者發送更改通知。

+0

妥協IP地址很難,但用戶代理可以很容易地由攻擊者提供。我承認這可能會讓事情變得更難以破解。另一方面,如果他/她正在移動(經常用他的機器(筆記本電腦,平板電腦等)改變她/他的位置),檢查IP地址對於客戶來說可能是非常煩人的。但我仍然+1。 – tugberk 2012-08-03 09:26:44

2

對於您所做的所有事情以及考慮到this question的額外建議,我會額外建議您在服務器上保留更多關於用戶的信息以及身份驗證Cookie,因此如果某人竊取了Cookie並嘗試使用它,也必須符合客戶的所有其他特徵才能使用它。

我保留並檢查的其餘一些信息與認證cookie一起。

  1. 會話cookie與認證cookie連接。
  2. 瀏覽器ID與與
  3. 的Javascript連接用戶的
  4. 葉連接必須使

我知道,有人可以說,一切可以被黑客克隆 - 如果黑客可以拿餅乾爲什麼不能和其他人一樣。那麼沒有什麼是100%保證的情況下,如果有人可以採取所有的信息實際上可以有,密碼它的自我和登錄 - 至少你讓它更安全一點。