2009-10-01 128 views
1

我從遷移ColdFusion的到ASP.Net MVC應用程序,並有一個小問題,我似乎無法左右我的頭。原始應用程序將數據庫中的用戶密碼存儲在MD5散列格式中,不含salt。我正在使用ASP.Net會員店,並希望儘可能爲現有用戶提供無縫過渡。這是我正在考慮的可能性...設置會員店密碼

1)由於我無法解密他們當前密碼的值,我正在考慮將這個舊密碼存儲在表中,在登錄時檢查它是否...如果它不是空和他們的密碼匹配,我提示他們更新他們的密碼,然後它將在asp.net會員表中正確設置密碼並清除舊密碼,永不再次檢查。

2)用戶登錄他們的電子郵件,而不是他們的網名,所以我想他們的網名重置每個人的密碼,並迫使他們首次登錄後更改的。唯一的問題是,我不知道我可以通過SQL更新他們的密碼,而不需要當前的密碼。執行aspnet_Membership_SetPassword proc似乎不會自己加密密碼。

你說什麼?

回答

2

我在現場應用中使用的#1變體。它運作良好,用戶從未注意到我所知道的變化。

幾個改進的:

  • 你並不需要提示他們更新自己的密碼;他們爲您提供了登錄的明文(並且您知道這是正確的明文,因爲它正確哈希),所以請繼續並將其設置爲密碼。
  • 如果他們使用密碼重置功能,請確保您清除舊密碼散列。

我會在任何情況下使用選項2;這是非常不安全的。

另外一件事 - 可以在不知道當前密碼的情況下設置密碼,它只需要兩個步驟。

  1. 重置用戶的密碼。您現在知道重置密碼。
  2. 使用新設置的密碼將密碼設置爲已知值。
2

我也有類似的情況recently-我的一個老的應用程序使用的醃MD5,我非常想在不影響我的用戶升級。我最終做的是將原始哈希包裝在一個更好的哈希中,然後重新醃製它以減輕分辨率的損失。

例如我最初的哈希值是MD5(通+鹽)

我升級一切SHA256(MD5(通+鹽)+鹽) - 這樣我的應用程序是安全的,我從來沒有需要找出原始密碼或重置任何東西。

一旦新的認證過程是否到位了簡單的數據庫中的所有現有用戶運行更新腳本。這有點痛苦,但對用戶來說實質上是無縫的。

-

Bah-我道歉,這不是真的,因爲我用我的應用程序自定義的身份驗證類針對ASP.net成員。我仍然認爲這是執行升級更健全的方法之一,但我不確定ASP.net會員詳細信息。

+1

是的,ASP.NET並沒有給你太多的控制權限在默認提供程序中進行散列;不過,您可以輕鬆地在自定義會員提供商中完成此操作。有趣的解決方案。 – technophile 2009-10-01 16:19:16

0

選項2是一個相當大的安全風險。如果有人知道在合適的所有者登錄之前,屏幕名稱的電子郵件可能會記錄劫持該帳戶。知道或猜測最受歡迎的網站用戶(即最誘人的劫持人員)的電子郵件可能比您想象的更普遍。