CodeIgniter的密碼處理論

在你的應用程序中正確處理密碼是很是關鍵的。前陣閱讀CI手冊,發現CodeIgniter對密碼處理的總結對我頗有幫助,把這個清單分享給你們,它告訴你什麼該作,什麼不應作。算法

  • 毫不要以明文存儲密碼。永遠使用 哈希算法 來處理密碼。segmentfault

  • 毫不要使用 Base64 或其餘編碼方式來存儲密碼。這和以明文存儲密碼是同樣的,使用哈希 ,而不要使用編碼。
    (編碼以及加密,都是雙向的過程,而密碼是保密的,應該只被它的全部者知道, 這個過程必須是單向的。哈希正是用於作這個的,歷來沒有解哈希這種說法, 可是編碼就存在解碼,加密就存在解密。)安全

  • 毫不要使用弱哈希或已被破解的哈希算法,像 MD5 或 SHA1。
    (這些算法太老了,並且被證實存在缺陷,它們一開始就並非爲了保存密碼而設計的。另外,毫不要本身發明算法。)函數

  • 只使用強密碼哈希算法,例如 BCrypt。
    (在 PHP 本身的 密碼哈希 函數中也是使用它。)編碼

  • 毫不要以明文形式顯示或發送密碼。
    (即便是對密碼的全部者也應該這樣。若是你須要 "忘記密碼" 的功能,能夠隨機生成一個新的 一次性的(這點很重要)密碼,而後把這個密碼發送給用戶。)加密

  • 毫不要對用戶的密碼作一些不必的限制。
    (若是你使用除 BCrypt(它有最多 72 字符的限制)以外的其餘哈希算法,你應該設置一個相對長一點的密碼長度(例如 1024 字符),這樣能夠緩解 DoS 攻擊。可是除此以外,對密碼的其餘限制諸如密碼中只容許使用某些字符,或者密碼中不容許包含某些字符,就沒有任何意義了。這樣作不只不會提升安全性,反而 下降了 安全性,並且真的沒有任何理由須要這樣作。 只要你對密碼進行哈希處理了,那麼不管是技術上,仍是在存儲上都沒有任何限制。)設計

擴展閱讀:[鑑]PHP處理密碼的幾種方式:http://www.javashuo.com/article/p-zmqgksfm-db.htmlget

相關文章
相關標籤/搜索