我应该通过在 SQL 表中搜索来验证用户名和密码,还是应该找到用户名然后将密码与 PHP if 语句进行匹配?
SELECT * FROM 表,其中用户名 = $用户名 AND 密码 =$密码
SELECT * FROM 表,其中用户名 = $用户名
...if ($row[密码] == $密码) { 做东西 }
哪种方法更安全、更高效?
最佳答案
事情是......你应该 store salted, hashed passwords在数据库中。由于这些内容是针对每个用户/密码单独加盐的,因此您无法直接使用password = ?
查找它们,因为您不知道加盐因此无法提前计算匹配的哈希值。如果您正确执行此操作,您必须首先通过用户名获取用户记录,然后使用检索到的盐/哈希值验证密码哈希值。伪代码:
$user = fetch_from_database($_POST['username']);
if (!$user) {
throw new Exception("User doesn't exist");
}
if (!password_verify($_POST['password'], $user['password_hash'])) {
throw new Exception('Invalid password');
}
echo 'Welcome ', $user['name'];
参见http://php.net/password_hash , http://php.net/password_verify .
关于php - 哪种方法更好地验证用户凭据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38782603/