2013-04-26 20 views
0

我有一個系統,用戶可以通過Facebook或常規形式註冊。如果用戶通過Facebook註冊,我的系統會生成一個隨機密碼,以允許用戶在沒有Facebook的情況下登錄,如果他願意的話。如果用戶使用常規形式註冊,他可以輸入他想要的任何密碼。在兩種方式中,密碼都被編碼成MD5哈希碼,但沒有醃製。這是不安全的,我知道,這是我在這裏的原因。密碼MD5編碼無鹽。如何解決它?

我不知道將密碼轉換爲安全密碼的最佳策略...首先,我想保留MD5不安全的密碼,並且當用戶登錄時,我可以匹配沒有鹽的密碼,鹽 - 然後更新數據庫。但它不能解決我的問題,因爲系統仍然會接受不安全的密碼。除此之外,用戶仍然可以使用Facebook登錄,但不允許我更新密碼(因爲他沒有使用它)。

那麼,有沒有人有一個想法,儘量減少影響,而不是隻強迫每個人都更新密碼?

謝謝!

+1

我在這裏回答了一個類似的問題[將舊密碼移動到新哈希算法](http://stackoverflow.com/a/14402451/575765)。 – martinstoeckli 2013-04-27 13:07:46

+0

這是一個不錯的提示,@martinstoeckli,謝謝!我將散列哈希以使其更安全。 – 2013-05-02 19:32:35

+0

不客氣。還有一點,請使用像BCrypt這樣的慢哈希函數來加密你的密碼,像MD5或SHA- *這樣的函數對於哈希密碼來說太快了。 – martinstoeckli 2013-05-02 19:39:46

回答

0

因此,我已經完成了以下操作來解決我的問題。

  1. 在用戶表中創建了一列「LastPasswordChange」。
  2. 當用戶更改密碼時,該字段會更新爲當前日期,同時,會向用戶發送一封電子郵件以通知密碼已更改,並且在鏈接錯誤的情況下還原鏈接(由於可能破解)。
  3. 電子郵件允許用戶在不知道上次使用的情況下登錄並設置新密碼。
  4. 當用戶使用當前密碼登錄時,它會查看LastPasswordChange字段,如果它爲null,則允許登錄而不使用salt。
  5. 以任何方式他/她登錄(Facebook或登錄/通行證),系統查找LastPasswordChange字段,如果它爲空,則系統要求用戶將當前密碼更改爲不同的密碼(不匹配舊密碼無鹽)。

就是這樣。