在你的應用程式中正確處理密碼是非常關鍵的。前陣閱讀CI手冊,發現CodeIgniter對密碼處理的總結對我很有幫助,把這個清單分享給大家,它告訴你什麼該做,什麼不該做。
-
絕不要以明文儲存密碼。永遠使用 雜湊演算法 來處理密碼。
-
絕不要使用 Base64 或其他編碼方式來儲存密碼。這和以明文儲存密碼是一樣的,使用雜湊 ,而不要使用編碼。
(編碼以及加密,都是雙向的過程,而密碼是保密的,應該只被它的所有者知道, 這個過程必須是單向的。雜湊正是用於做這個的,從來沒有解雜湊這種說法, 但是編碼就存在解碼,加密就存在解密。) -
絕不要使用弱雜湊或已被破解的雜湊演算法,像 MD5 或 SHA1。
(這些演算法太老了,而且被證明存在缺陷,它們一開始就並不是為了儲存密碼而設計的。另外,絕不要自己發明演算法。) -
只使用強密碼雜湊演算法,例如 BCrypt。
(在 PHP 自己的 密碼雜湊 函式中也是使用它。) -
絕不要以明文形式顯示或傳送密碼。
(即使是對密碼的所有者也應該這樣。如果你需要 “忘記密碼” 的功能,可以隨機生成一個新的 一次性的(這點很重要)密碼,然後把這個密碼傳送給使用者。) -
絕不要對使用者的密碼做一些沒必要的限制。
(如果你使用除 BCrypt(它有最多 72 字元的限制)之外的其他雜湊演算法,你應該設定一個相對長一點的密碼長度(例如 1024 字元),這樣可以緩解 DoS 攻擊。但是除此之外,對密碼的其他限制諸如密碼中只允許使用某些字元,或者密碼中不允許包含某些字元,就沒有任何意義了。這樣做不僅不會提高安全性,反而 降低了 安全性,而且真的沒有任何理由需要這樣做。 只要你對密碼進行雜湊處理了,那麼無論是技術上,還是在儲存上都沒有任何限制。)
擴充套件閱讀:[鑑]PHP處理密碼的幾種方式:https://segmentfault.com/a/1190000003024932