我有網站上的用戶,他們的密碼被加密(md5)並存儲在數據庫中。現在,我有他們的電子郵件,如果有人忘記了他的密碼,我想給他發送鏈接以重置它的密碼。這是創建鏈接重置密碼的最佳做法?
任何人都可以建議如何做到這一點?哪些是最佳做法?
問候,卓然
我有網站上的用戶,他們的密碼被加密(md5)並存儲在數據庫中。現在,我有他們的電子郵件,如果有人忘記了他的密碼,我想給他發送鏈接以重置它的密碼。這是創建鏈接重置密碼的最佳做法?
任何人都可以建議如何做到這一點?哪些是最佳做法?
問候,卓然
在是相當獨特的,並且是隨機生成的令牌字符串(相當長的)數據庫流行的一列。當用戶請求重置密碼時,請在電子郵件中發送該令牌以進行驗證。通過鏈接返回該令牌(aka GET)將確認用戶有權訪問該電子郵件地址,並允許他們重置密碼。
你應該發送一封電子郵件,使用mail()
並添加到db一個散列隨機字符串。電子郵件應該包含一個鏈接,如「domain.com/forgot.php?h=HASHEDSTRING」。在該頁面中,您應該檢查哪個用戶擁有該散列字符串並輸出一個字段供他們重置密碼。
你可以做如下,
如果用戶忘記了自己的密碼,允許他進入與註冊郵箱。
發送一封電子郵件,重置密碼鏈接和鏈接應包含MD5(部分數據) 例如:www.ex.com/md5_data
發送郵件進入檢查電子郵件出現之前,如果存在取用戶ID,存儲用戶ID,md5(數據),你正在郵件發送
當用戶點擊鏈接發送到郵件獲取網址數據,並檢查是否存在您的表中的MD5數據,如果存在獲取用戶ID並允許他使用用戶ID設置新密碼和更新密碼,並從表中刪除md5數據,所以如果他再次點擊鏈接,它不應該工作。
辦理密碼重置可能看起來像這樣的安全方式:
密碼重設要求:
密碼重置:
您可以使用像SHA512這樣的散列算法對沒有鹽的散列進行散列。這是安全的,如果令牌是非常強(最小長度20 0-9 A-Z A-Z)。理論上你必須檢查你輸入數據庫之前,在實踐中,這是可以忽略不計,例如哈希是否已經存在。
UPPS,我剛纔已經意識到這是一個古老的線程。 – martinstoeckli 2015-07-07 20:18:45
欣賞此答案中的細節和清晰度。謝謝。 – Mina 2015-12-31 13:30:41
MD5不是 「加密」,這是* *散列。 MD5也不是很好的哈希。 – deceze 2012-08-10 09:54:00