我在阅读有关使用 password_hash()
时的空字节问题。这给了我两个问题:
- 从 PHP7 开始,空字节漏洞是否仍然存在?我尝试使用 password_hash() 复制它,但要么它已修复,要么我无法复制它。当
\0
之后的字符不同或不存在时,password_verify()
返回 false。 - 在处理密码时,还有什么其他注意事项我应该注意的吗?我不想对它们本身进行清理(用户需要确保处理后的密码字符串正是他们发送的),但我看到了这样的代码(再次,与空字节相比):
str_replace(chr (0), '', $输入)
.我应该在处理密码时使用它吗?我还应该使用其他东西吗?
最佳答案
你可以测试一下
$hash = password_hash("\x00 abc", PASSWORD_DEFAULT);
var_dump(password_verify("\x00 foo", $hash)); // true ???
但是当从 ie 表单提交密码时,您会收到字符串“\x00 password”,它不会像“\x00 password”那样插入(单引号与双引号)。
$hash = password_hash("\x00 abc", PASSWORD_DEFAULT);
var_dump(password_verify('\x00 foo', $hash)); // false!
关于php - 为 password_hash() 清理密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49245637/