將密碼進行雜湊(Hash)時,並沒有進行加鹽(salt)的動作,導致攻擊者可以藉由預先計算密碼的雜湊表格(rainbow table)來進行比對,對照出原始密碼。
將密碼進行雜湊時,建議使用加鹽的操作使得密碼經過雜湊後的值變化很大,讓攻擊者很難根據rainbow table進行攻擊;此外,建議不要使用MD5、SHA1等不夠安全的hash演算法、salt長度要足夠長以及每次salt的值均要不同。
不安全的範例:
md5(""MyP@22W0rd!"");
上述範例可修改如下:
password_hash(""MyP@22W0rd!"", PASSWORD_DEFAULT);
注意:第二個參數不可省(PASSWORD_DEFAULT),不然程式會跳錯!
由於前面password hash 使用了PASSWORD_DEFAULT,
因此,無法得知到底使用了哪組SALT,直接用 password_hash(""MyP@22W0rd!"", PASSWORD_DEFAULT); 來比對會顯示密碼錯誤(資料庫的密碼是不加鹽的啊!)
所以要用透過 password_verify 進行驗證:
password_verify($使用者輸入的密碼, $存在資料庫的密碼);
參考資料:現代PHP password_hash 雜湊加密採用隨機SALT 使用方式