【发布时间】:2019-05-24 00:03:19
【问题描述】:
在注册新用户时,代码使用 BCRYPT 和 MD5 创建哈希,如下所示:
$password = $mysqli->escape_string(password_hash($_POST['password'],
PASSWORD_BCRYPT));
$hash = $mysqli->escape_string( md5( rand(0,1000) ) );
一旦用户名、密码和哈希在 SQL 数据库中,我想验证密码。问题是下面的代码将散列密码与输入表单的密码进行比较......
如何将输入表单的密码与存储在数据库中的散列密码进行比较?
我有以下代码:
function getLogin($conn) {
if (isset($_POST['loginSubmit'])){
$email = $_POST['email'];
$password = $_POST['password'];
$sql = "SELECT * FROM users WHERE email='$email' AND password='$password'" ;
$result = mysqli_query($conn, $sql);
if(mysqli_num_rows($result) == 1) {
if($row = $result->fetch_assoc()) {
$_SESSION['id'] = $row['id'];
$_SESSION['email'] = $row['email'];
header("Location: indexcomments_merge.php?logiinsuccess");
exit();
}
} else {
header("Location: indexcomments_merge.php?logiinfailed");
exit();
}
}
}
【问题讨论】:
-
您需要对输入表单的密码进行哈希处理,并将其与数据库中的哈希值进行比较。
-
只需在检查代码中重复
$password = $mysqli->escape_string(password_hash($_POST['password'], PASSWORD_BCRYPT));。 (顺便说一句,MD5 存储密码可能太弱了) -
也许你的问题已经回答了:stackoverflow.com/questions/26536293/…
-
不要转义(反正你以后不会这样做),也不要使用 MD5。参数化查询。始终参数化用户输入。
-
目前对 SQL 注入攻击开放。