我使用crypt()
在PHP中對哈希密碼進行哈希,並且試圖找出在執行密碼檢查時測試結果哈希的相等性的最安全方法。strcmp與==對比在PHP == == ===檢查哈希值是否相等
有三種選擇,我可以看到:
選項1 - 雙等於
function checkPassword($hash, $password)
{
return crypt($password, $hash) == $hash;
}
選項2 - 三人的Equals
function checkPassword($hash, $password)
{
return crypt($password, $hash) === $hash;
}
選項3 - strcmp()
function checkPassword($hash, $password)
{
return strcmp(crypt($password, $hash), $hash) === 0;
}
我的直覺告訴我,由於缺少類型檢查,選項1是一個壞主意,選項2或3可能會更好。但是,如果有一個特定情況下===
或strcmp
會失敗,我無法解決。哪一個最安全?
閱讀它:http://raz0r.name/vulnerabilities/simple-machines-forum/ – user956584
@Userpassword有趣的bug!我想知道PHP在處理數字時如何處理'$ 2a $ 10 $ ... $'這樣的字符串...... – Polynomial
如果您只想可靠地比較哈希,只需使用'==='。如果你真的關心安全性和潛在的定時攻擊(即使網絡抖動),你應該看看[this](https://github.com/delight-im/Faceless/issues/4)或[this] (https://github.com/delight-im/Faceless/pull/5)討論或使用'hash_equals()'函數(PHP 5.6+)。 – caw