處理忘記密碼/密碼重置的最安全方法是什麼?我應該將密碼發送給用戶嗎?如果是,那麼強迫他們重置它?或者你是否讓他們立即重置(不發送電子郵件)並要求其他信息來驗證是否是他們?還是有更好的方法?重置密碼或提供舊密碼的安全方法
8
A
回答
14
不能電子郵件將密碼發給用戶,因爲你不知道它。你已經通過applying something like PBKDF2 or bcrypt「散列」了它來存儲,對吧?
如果您在未向帳戶所有者確認的情況下重置密碼,攻擊者可以通過使用受害者的電子郵件地址請求重置,拒絕所有者訪問其帳戶,至少在他檢查他的電子郵件之前。
對於許多應用程序來說,足夠安全的方法是將鏈接發送給帳戶所有者,包含一個隨機生成的大號。此令牌只應在有限的時間內有效。如果所有者希望重置密碼,他們點擊該鏈接,並將其認證爲帳戶所有者。賬戶擁有者可以指定一個新的密碼。
0
我想你會以編程的方式做到這一點?或者這是服務器故障的問題?
其中一種方法是發送鏈接到用戶的電子郵件帳戶。他/她點擊該鏈接,並重定向到您的安全Web窗體,他們重置密碼。
不要通過電子郵件發送密碼到用戶
5
你不應該通過電子郵件發送密碼。這裏是我用過的一步一步的過程:
- 給用戶一個重置密碼選項。
- 此選項爲用戶保存一個唯一的標記。令牌最終會過期(幾小時,一天或幾天)。
- 鏈接通過電子郵件發送給包含令牌的用戶。
- 用戶單擊電子郵件鏈接。
- 如果令牌存在並且未過期,則鏈接加載新的密碼錶單。 如果不是,請不要加載新的密碼錶單。
- 用戶設置新密碼後,請刪除令牌並向用戶發送確認電子郵件。
直到設置了新密碼,舊密碼纔會保持活動狀態。不要忘記哈希和鹽的密碼!
相關問題
- 1. 用密碼提供密碼
- 2. 提供密碼
- 3. 更改用彈簧安全驗證舊密碼的密碼錶
- 4. 密碼安全
- 5. 安全的方式通過URL提供密碼?
- 6. Mac重置密碼提示
- 7. 重置新密碼與舊密碼匹配
- 8. PDO密碼安全
- 9. 密碼生成無安全編碼的URL安全密文
- 10. 密碼加密/解密彈簧安全
- 11. 存儲密鑰和密碼的安全方法,用於asp.net
- 12. 解密密碼的最佳方法(從安全角度來看)
- 13. 重置密碼的另一種方法
- 14. 帶密碼的密碼重置laravel 4.2
- 15. Spring3安全 - SwitchUserFilter - 可我們的UserDetailsService的實現提供加密的密碼
- 16. 如何使我的密碼輸入密碼重置功能安全?
- 17. 安全地重置密碼的強大算法
- 18. 會員提供程序將密碼重置爲自定義格式化密碼
- 19. 導軌,提供密碼的視覺反饋,但保持安全
- 20. 重置加密密碼
- 21. 的.htaccess安全VS密碼
- 22. 鹽漬的密碼安全
- 23. sha512安全的密碼
- 24. 相冊的密碼安全
- 25. MySQL的密碼安全
- 26. 在GPG中解密時提供密碼
- 27. 提供的密碼無效。密碼必須符合爲默認供應商配置的密碼強度要求
- 28. 無法重置mysql'root'密碼
- 29. 無法重置MySQL密碼
- 30. 重置密碼算法
最近剛剛就這個話題進行了一場巨大的討論:http://stackoverflow.com/questions/2283937/how-should-i-ethically-approach-user-password-storage-for-later-plaintext-retriev – 2010-03-01 23:36:41
如果您的系統有能力查找用戶的密碼並通過電子郵件發送給他,那麼您做了一些非常錯誤的事情。你永遠不應該能夠查找用戶的密碼。您應該只能散列傳入的密碼並進行比較或更改,並將新密碼發送出去。 – Scott 2011-07-08 22:09:49