2010-03-01 196 views
8

處理忘記密碼/密碼重置的最安全方法是什麼?我應該將密碼發送給用戶嗎?如果是,那麼強迫他們重置它?或者你是否讓他們立即重置(不發送電子郵件)並要求其他信息來驗證是否是他們?還是有更好的方法?重置密碼或提供舊密碼的安全方法

+0

最近剛剛就這個話題進行了一場巨大的討論:http://stackoverflow.com/questions/2283937/how-should-i-ethically-approach-user-password-storage-for-later-plaintext-retriev – 2010-03-01 23:36:41

+0

如果您的系統有能力查找用戶的密碼並通過電子郵件發送給他,那麼您做了一些非常錯誤的事情。你永遠不應該能夠查找用戶的密碼。您應該只能散列傳入的密碼並進行比較或更改,並將新密碼發送出去。 – Scott 2011-07-08 22:09:49

回答

14

不能電子郵件將密碼發給用戶,因爲你不知道它。你已經通過applying something like PBKDF2 or bcrypt「散列」了它來存儲,對吧?

如果您在未向帳戶所有者確認的情況下重置密碼,攻擊者可以通過使用受害者的電子郵件地址請求重置,拒絕所有者訪問其帳戶,至少在他檢查他的電子郵件之前。

對於許多應用程序來說,足夠安全的方法是將鏈接發送給帳戶所有者,包含一個隨機生成的大號。此令牌只應在有限的時間內有效。如果所有者希望重置密碼,他們點擊該鏈接,並將其認證爲帳戶所有者。賬戶擁有者可以指定一個新的密碼。

0

我想你會以編程的方式做到這一點?或者這是服務器故障的問題?

其中一種方法是發送鏈接到用戶的電子郵件帳戶。他/她點擊該鏈接,並重定向到您的安全Web窗體,他們重置密碼。

不要通過電子郵件發送密碼到用戶

5

你不應該通過電子郵件發送密碼。這裏是我用過的一步一步的過程:

  1. 給用戶一個重置密碼選項。
  2. 此選項爲用戶保存一個唯一的標記。令牌最終會過期(幾小時,一天或幾天)。
  3. 鏈接通過電子郵件發送給包含令牌的用戶。
  4. 用戶單擊電子郵件鏈接。
  5. 如果令牌存在並且未過期,則鏈接加載新的密碼錶單。 如果不是,請不要加載新的密碼錶單。
  6. 用戶設置新密碼後,請刪除令牌並向用戶發送確認電子郵件。

直到設置了新密碼,舊密碼纔會保持活動狀態。不要忘記哈希和鹽的密碼!