PHP crypt即使在密码后面有后缀也会返回true



所以我的登录脚本中有一个小漏洞。

假设我们有一个密码为"s3cret"的用户"David"。如果David使用s3cret登录,则他已登录,并且一切正常。如果他使用"oijopij"登录,系统将不会像预期的那样授予他访问权限。然而,如果他试图用"s3cretHelloimasuffix"登录,他也会登录。这是我用crypt:创建哈希的部分

$salt = //Some random salt string
$hash = crypt( $user->pass, $salt );

然后将该散列插入到DB中。

if ( crypt( $this->data->pass, $user->pass ) == $user->pass )
     return true;
return false;

这就是实际根据哈希检查密码的部分,密码和哈希都是正确的。但是,即使密码后面有后缀,它仍然返回true。

编辑:我忘记了实际的问题:我该如何解决这个问题?因为这可能被视为安全漏洞,尽管在实践中并非如此。

crypt在使用时被限制为8个字符的密码:

php > echo crypt('1234567', 'abc');
ablk9HoaAwzxk
php > echo crypt('12345678', 'abc');
ab1iBa.N.U2C6   
php > echo crypt('123456789', 'abc');
ab1iBa.N.U2C6
php > echo crypt('1234567890', 'abc');
ab1iBa.N.U2C6

注意。。。8.89。。。890个版本具有相同的散列。

crypt已过时,不应再用于密码系统。password_hash()是现在推荐的方法,它支持多种哈希方法,包括bcrypt,应该用于密码哈希。

相关内容

  • 没有找到相关文章

最新更新