簡體   English   中英

PHP密碼恢復

[英]PHP password recovery

我意識到,為了安全起見,密碼不應該以明文形式存儲在數據庫中。 如果我將它們哈希,我可以驗證它們以用於登錄。

但是,如果我想建立一個密碼恢復系統,那么最好的策略是什么,因為沒有撤消哈希?

有人能給我一個關於存儲和恢復密碼的良好安全策略的簡要概述嗎?

您無法恢復散列的密碼,也不應該。

你應該做的是:

  1. 對密碼重置請求進行一些驗證,如CAPTCHA。
  2. 創建一次性隨機代碼並將其鏈接發送到用戶的電子郵件。
  3. 讓這段代碼在一小時后過期。
  4. 此代碼一旦使用就會立即過期。
  5. 在與代碼的鏈接上,如果驗證,則允許他更改密碼。
  6. 通知他密碼已更改,但不要在電子郵件中發送。

你沒有“恢復”密碼。 你做的是兩件事之一。

  1. 通過電子郵件向用戶發送一個鏈接以創建新密碼,覆蓋當前密碼
  2. 通過電子郵件向用戶發送隨機生成的密碼,然后讓他們更改密碼

我的流程如下。

1.用戶發起忘記密碼請求

用戶單擊忘記的密碼鏈接,然后重定向到重置密碼表單,要求他們輸入其注冊的電子郵件地址。

2.驗證電子郵件地址並生成令牌

用戶輸入其電子郵件地址后,系統會驗證它是否存在於數據庫中。 如果電子郵件地址有效,則生成令牌並使用用戶憑據存儲在數據庫中。

3.發送恢復郵件

電子郵件發送到注冊的電子郵件地址,其中包含指向重置表單的鏈接,該鏈接包括2個GET參數,包括令牌和存儲在數據庫中的用戶唯一ID。

4.重置密碼

用戶單擊鏈接后,將轉到重置表單。 系統從URL檢索2 GET參數並驗證它們是否存在於數據庫中。 如果驗證令牌與用戶存在於數據庫中,則可以向用戶顯示重置密碼表單字段以輸入新密碼。

安全

我建議使用BCrypt(自PHP 5.3起可用)來散列密碼和額外的安全性,或許對令牌使用某種過期,以便在一段時間后不能使用它。

您可以為用戶和md5創建一個新的(並隨機生成的)密碼,然后通過電子郵件發送用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM