清理password_hash()的密码

时间:2018-03-12 22:52:14

标签: php security passwords password-hash

我在阅读使用password_hash()时的空字节问题。这给了我两个问题:

  • 从PHP7开始是否仍然存在空字节漏洞?我尝试使用password_hash()复制它,但要么已修复,要么我无法复制它。当password_verify()之后的字符不同或不存在时,\0会返回false。
  • 在处理密码时我应该注意哪些其他警告?我不想对它们进行消毒(用户需要确保处理后的密码字符串与它们发送的完全相同),但我看到了这样的代码(再次,vs null-bytes):str_replace(chr(0), '', $input)。处理密码时我应该使用它吗?我也应该使用其他东西吗?

1 个答案:

答案 0 :(得分:3)

您可以使用

进行测试
$hash = password_hash("\x00 abc", PASSWORD_DEFAULT);
var_dump(password_verify("\x00 foo", $hash)); // true ???

但是当您从表格中提交密码时,您会收到字符串' \ x00密码'这将插入像" \ x00密码" (单引号和双引号)。

$hash = password_hash("\x00 abc", PASSWORD_DEFAULT);
var_dump(password_verify('\x00 foo', $hash)); // false!