【发布时间】:2019-03-20 17:02:30
【问题描述】:
我遇到了这样一种情况,即我有两台服务器位于负载平衡器后面。我使用 password_hash() 在一台服务器上生成密码。
基本上是这样的
password_hash('XXXXXXXXX', PASSWORD_DEFAULT);
在我的应用程序中,当我向使用 password_verify() 的端点发出请求时,当请求到达服务器 1 时,密码已正确验证并且请求已验证,但是当负载平衡器将请求发送到服务器 2 时 password_verify( ) 似乎无法验证密码。
我已验证两台服务器都使用完全相同版本的 PHP,在同一天编译并运行 PHP 7.1.2。我这里还有什么遗漏的吗?
【问题讨论】:
-
旁注:“无法解密密码”_ - password_verify 不解密密码。它的散列方式与 password_hash 相同(希望使用相同的盐 - 这可能是您的问题)并进行了省时比较。
-
@Jeff 理解,password_verify 在服务器 2 上返回 false,但在服务器 1 上返回 true
-
愚蠢的问题:两个 Web 服务器是否使用相同的数据库?
-
您是否验证函数的输入数据在两种情况下完全相同?
-
盐不是问题,因为它与哈希一起存储。通过
password_hash()生成的散列独立于服务器。验证哈希所需的一切都在哈希本身中。我能做的唯一区别可能是一个问题,如果创建哈希的服务器是用Argon2i支持编译的(然后被使用),而另一台服务器没有。如果不是这种情况,那么一定有其他事情发生。
标签: php bcrypt password-hash php-password-hash