使用 pdo 检查用户名(哈希)或电子邮件(哈希)是否已经存在
Check if username (Hashed) or email(Hashed) already exist with pdo
我正在尝试验证 username
或 email
是否已被填写在注册表中,但我不知道该怎么做,因为两者都在我的数据库中使用 password_hash()
,我如何比较用户输入与 pdo 中的数据库?请解释一下代码。
如果您的电子邮件每个散列都使用唯一的盐进行散列,则除了针对 all 散列进行针头测试外,无法测试任何一封特定电子邮件的存在数据库。例如:
foreach ($db->query('SELECT email_hash FROM users') as $user) {
if (password_verify($_POST['email'], $user['email_hash'])) {
$found = true;
break;
}
}
没有其他方法,因为没有单独的盐就无法重新创建散列,而且由于您不知道要寻找的盐是什么,所以您只需全部完成。
如果 您要对需要在数据库中搜索的数据进行哈希处理,至少不能对其进行加盐处理。但是,如果它没有加盐,那么它对您试图防御的场景几乎没有任何保护作用。底线:您需要查询的散列数据毫无意义。
我正在尝试验证 username
或 email
是否已被填写在注册表中,但我不知道该怎么做,因为两者都在我的数据库中使用 password_hash()
,我如何比较用户输入与 pdo 中的数据库?请解释一下代码。
如果您的电子邮件每个散列都使用唯一的盐进行散列,则除了针对 all 散列进行针头测试外,无法测试任何一封特定电子邮件的存在数据库。例如:
foreach ($db->query('SELECT email_hash FROM users') as $user) {
if (password_verify($_POST['email'], $user['email_hash'])) {
$found = true;
break;
}
}
没有其他方法,因为没有单独的盐就无法重新创建散列,而且由于您不知道要寻找的盐是什么,所以您只需全部完成。
如果 您要对需要在数据库中搜索的数据进行哈希处理,至少不能对其进行加盐处理。但是,如果它没有加盐,那么它对您试图防御的场景几乎没有任何保护作用。底线:您需要查询的散列数据毫无意义。