正在清理 password_hash() 的密码
Sanitizing passwords for password_hash()
我正在阅读有关使用 password_hash()
时的空字节问题。这给了我两个问题:
- 从 PHP7 开始,空字节漏洞是否仍然存在? 我尝试用 password_hash() 复制它,但它要么已修复,要么我无法复制它。
password_verify()
returns 当 [=13=]
之后的字符不同或不存在时为 false。
- 我在处理密码时是否还有其他需要注意的事项?我不想对它们本身进行清理(用户需要确保处理后的密码字符串正是他们发送的),但我看到了这样的代码(再次,与空字节相比):
str_replace(chr(0), '', $input)
。我应该在处理密码时使用它吗?我也应该使用其他东西吗?
您可以使用
进行测试
$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!
我正在阅读有关使用 password_hash()
时的空字节问题。这给了我两个问题:
- 从 PHP7 开始,空字节漏洞是否仍然存在? 我尝试用 password_hash() 复制它,但它要么已修复,要么我无法复制它。
password_verify()
returns 当[=13=]
之后的字符不同或不存在时为 false。 - 我在处理密码时是否还有其他需要注意的事项?我不想对它们本身进行清理(用户需要确保处理后的密码字符串正是他们发送的),但我看到了这样的代码(再次,与空字节相比):
str_replace(chr(0), '', $input)
。我应该在处理密码时使用它吗?我也应该使用其他东西吗?
您可以使用
进行测试$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!