2020-11-04

[PHP] 修復漏洞: Use of a One Way Hash without a Salt

Use of a One Way Hash without a Salt

漏洞說明:Use of a One Way Hash without a Salt

將密碼進行雜湊(Hash)時,並沒有進行加鹽(salt)的動作,導致攻擊者可以藉由預先計算密碼的雜湊表格(rainbow table)來進行比對,對照出原始密碼。

建議解決方法

將密碼進行雜湊時,建議使用加鹽的操作使得密碼經過雜湊後的值變化很大,讓攻擊者很難根據rainbow table進行攻擊;此外,建議不要使用MD5、SHA1等不夠安全的hash演算法、salt長度要足夠長以及每次salt的值均要不同。
不安全的範例:
md5(""MyP@22W0rd!"");
上述範例可修改如下:
password_hash(""MyP@22W0rd!"", PASSWORD_DEFAULT);
注意:第二個參數不可省(PASSWORD_DEFAULT),不然程式會跳錯!

比對密碼是否正確,要用 password_verify()

由於前面password hash 使用了PASSWORD_DEFAULT,
因此,無法得知到底使用了哪組SALT,直接用 password_hash(""MyP@22W0rd!"", PASSWORD_DEFAULT); 來比對會顯示密碼錯誤(資料庫的密碼是不加鹽的啊!)
所以要用透過 password_verify 進行驗證:
password_verify($使用者輸入的密碼, $存在資料庫的密碼);
參考資料:現代PHP password_hash 雜湊加密採用隨機SALT 使用方式

請我喝杯咖啡吧 ^^

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

PeiYing Tsai
author
愛藝術,喜歡以科技解決問題的數位產品設計師。 堅持信念,任何困難事,必有搞定的一天,Just try it! 隨手紀錄日常學習到的知識心得,希望對妳/你有幫助。
coffee-cup linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram