【发布时间】:2018-08-21 02:05:57
【问题描述】:
我正在阅读使用password_hash() 时的空字节问题。这给了我两个问题:
-
从 PHP7 开始,空字节漏洞是否仍然存在? 我尝试使用 password_hash() 来复制它,但要么它已修复,要么我无法复制它。当
\0后面的字符不同或不存在时,password_verify()返回 false。 -
还有其他警告在处理密码时我应该注意什么?我不想对它们本身进行清理(用户需要确保处理后的密码字符串正是他们发送的内容),但我看到了这样的代码(再次,vs null-bytes):
str_replace(chr(0), '', $input)。处理密码时我应该使用它吗?我也应该使用其他东西吗?
【问题讨论】:
-
bcrypt 也有 72 个字节的硬限制,任何更多的内容都会被有效截断。如果您使用的是 PHP>=7.2,则可以使用不受这些问题影响的新 Argon2i 哈希。
-
虽然我通常反对以任何方式更改密码输入,但考虑到它们对 bcrypt 的影响,我认为删除
NUL字节并不是你能做的最糟糕的事情。更不用说你真的必须搞砸王室才能让他们在你的密码中摆在首位。 -
我什至不会对其进行消毒。只需测试一个 NULL 字节(如 strpos),如果为真则中止。
标签: php security passwords password-hash