【发布时间】:2017-07-12 20:52:13
【问题描述】:
到目前为止,我如何检查散列密码,如果数据库比家庭/大学中的测试更大,是否有一种方法可以使这个更干净,并且可能更快?
<?php
$pass = array();
$index =0;
$result = mysqli_query($db, "SELECT * FROM admins");
while ($row = mysqli_fetch_array($result)) {
$pass[$index] = $row['password'];
$newhash = $pass[$index];
if (password_verify($password, $newhash)) {
echo "Password Matched";
} else {
}
}
?>
编辑:有人指出要添加用户 ID,但我最初的问题是我验证数据的方式是最好的方式还是有优化的方式?
【问题讨论】:
-
先选择用户。
SELECT * FROM admins where email = ?或者您确定管理员。您还应该选择该列,而不是*。 -
您的代码可能会返回多个匹配多个具有相同密码的人。输入
WHERE以匹配用户名。¨ -
您可能应该有一个用户 ID 并明确选择该行(例如
SELECT * FROMadmins` WHEREid= ...`),这样您只需检查密码是否匹配 任何人? -
戈登,批准编辑时要小心,该编辑更改了代码(可能 OP 有正确的代码(未提及错误),但可能并非总是如此)
-
@chris85 你完全正确,我本能地修复了它,甚至没有考虑它。它缺少 1 个大括号。