1 回答

TA貢獻1876條經驗 獲得超7個贊
如果將false
或更改null
為空字符串,您還將看到生成的哈希值,前導字節返回相同的結果。您可以輕松測試前導空字節:
$var = password_hash(null, PASSWORD_DEFAULT, ['cost' => 10]);
var_dump($var);
var_dump(password_verify("\0", $var));
最終var_dump()
結果bool(true)
顯示您確實使用密碼中的前導空字節創建了哈希。這是預期的行為,password_hash()
因為它只會在出現錯誤時返回 NULL。
所以這確實不是問題,因為沒有人在密碼中使用 NULL 字節。只有當您嘗試“推出自己的”加密技術并且您通常傳遞的字符串根本不是字符串時,它才會成為問題。
即使您嘗試在字符串中設置 NULL 字節,它實際上只是一個字符串:
$hashed = password_hash('\0asdfghjkl', PASSWORD_DEFAULT, ['cost' => 10]);
var_dump($hashed);
var_dump(password_verify("\0", $hashed));
從bool(false)
.?password_verify()
_
底線
除非您試圖做一些棘手的事情,例如預先散列您的密碼,否則您在這里發現的都是設計使然。沒有人輸入除字符串以外的任何內容作為密碼(您可以仔細檢查密碼,但不要清理它們,以確保它是一個會被視為穿著吊帶腰帶的字符串),并且您永遠不應該遇到輸入 NULL 字節的情況。
- 1 回答
- 0 關注
- 100 瀏覽
添加回答
舉報