可以在没有密码的数字的情况下登录

时间:2014-06-19 13:57:09

标签: php crypt

我刚发现我的密码保护区域没有受到保护。密码是使用数字所必需的。现在,如果密码末尾有数字,只要密码的a-z部分正确,就会以某种方式接受登录。为什么这样,我该如何纠正? (PHP 5.4.28)

function generate_hash($password)
{
    $salt = openssl_random_pseudo_bytes(22);
    $salt = '$2a$%13$' . strtr($salt, array('_' => '.', '~' => '/'));
    return crypt($password, $salt);

}

$bind = array(":email" => $email, ":password" => crypt($password, generate_hash($password) ) );
            $results = $db->select("users", 'email=:email AND password=:password', $bind);

1 个答案:

答案 0 :(得分:2)

我不知道你的问题的具体细节,但你使用的哈希是完全错误的。要使用crypt,请执行以下操作:

注册时:

  • 创建随机盐
  • 以适当的格式创建$salt参数:$2a$xx$...(注意:否%,这可能导致问题)
  • 使用crypt($password, $salt)
  • 哈希密码
  • 将哈希存储在数据库中

登录时:

  • 根据输入的电子邮件
  • 从数据库中检索密码哈希
  • 使用crypt($enteredPassword, $databaseHash)
  • 生成哈希
  • 比较两个哈希

你根本就没有这样做。您可能也应该使用password_hash来代替使用原始crypt API时的许多陷阱。