2011-06-28 32 views
1

所以我打算使用phpass爲我的認證系統在PHP中使用哈希密碼。我的問題是,當有人因忘記密碼而要求恢復密碼時,最佳做法是什麼?你會實施一個問題/答案系統,並允許他們在網站上重置嗎?或者,您是否會暫時使用隨機密碼字符串重置密碼並通過電子郵件將其發送給他們?要求他們在下次登錄時更改它?或者有更好的方法嗎?PHP和恢復密碼的過程

回答

2

如果用戶選擇容易猜測的問題或攻擊者對受害者有深入的瞭解,則查詢/響應可能會不足。許多知名網站利用原始用戶提供的信息:電子郵件地址。發送密碼重置鏈接到電子郵件地址,並允許用戶通過鏈接重置密碼。

+1

@George Cummins好的,我將如何驗證用戶是否被允許重置密碼?在數據庫中創建一個唯一的隨機生成的tokey/key並將它發送給他們?然後,當他們點擊頁面時,它會將該電子郵件地址與該密鑰相匹配,如果匹配,則允許他們重置密碼? – John

+0

@約翰:是的,這是典型的模式。當用戶提交新密碼(賬號,最後交易等)時,您還應該詢問一些識別信息。 –

+0

Fishnet Security發佈了一篇有關可用技術的有趣論文。他們首選的方法結合了幾個認證步驟:http://www.fishnetsecurity.com/Resource_/PageResource/White_Papers/FishNetSecurity_SecureForgotPassword.pdf –

0

參考Jay's回答於Implement password recovery best practice有關如何使密碼恢復更安全以及爲什麼安全問題是一個壞主意的想法。

Bruce Schneier對這個問題也有想法。

我推薦Duncan建議什麼。

但是,你不應該做的:

發送密碼 - 因爲畢竟,作爲 已經提到的,你 沒有它。

生成一個新的臨時密碼 - 這不僅是因爲不安全的 發送密碼,這也導致 服務 拒絕攻擊的可能性。我可以去該網站,假裝 是你,請求一個新的密碼,然後 然後(如果你還沒有檢查你的 電子郵件)你不能登錄,不知道 爲什麼要不得不請求一個新的新的 密碼...

令牌可能是要走的路。 收到它通知一個被遺忘的 密碼請求,但不採取任何 行動,除非你確認。你會 也使它成爲一個短期的令牌和 相對較短的到期時間,以限制 的風險。

如果有什麼安全問題應該用來允許用戶發起密碼重置請求。 I.E.您需要提供您的電子郵件和安全問題答案才能發送密碼重置請求。