[英]Can't login with encrypted password from database
我可以使用md5加密密码,只需将其包装即可-
$Password = md5($_POST['password']);
用户注册后,已加密的密码将成功存储在数据库中。 但是,当我想使用纯文本密码登录时,它决定也不会。 我该如何解决这个问题?
<?php
if(isset($_POST['btnlogin'])) {
$Email = $_POST['email'];
$Password = $_POST['password'];
$Email = mysqli_real_escape_string($connection, $Email);
$Password = mysqli_real_escape_string($connection, $Password);
$query ="SELECT * FROM customers WHERE Email = '{$Email}' AND Password = '{$Password}'";
$select_customer_query = mysqli_query($connection, $query);
if (!$select_customer_query)
die("QUERY FAILED". mysqli_error($connection));
}
while($row = mysqli_fetch_array($select_customer_query)) {
$Email_db = $row['Email'];
$Password_db = $row['Password'];
$Firstname_db = $row['First_Name'];
$Lastname_db = $row['Last_Name'];
$string ="logged in as";
$logoutlink = '/ <a href="includes/back/logout.php">Logout</a>';
}
if ($Email_db == $Email || $Password_db == $Password ) {
header("Location: ../../index.php");
$_SESSION['FirstName'] = $Firstname_db;
$_SESSION['LastName'] = $Lastname_db;
$_SESSION['string'] = $string;
$_SESSION['logoutlink'] = $logoutlink;
}
?>
您在比较之前忘记了md5()
密码,则需要比较md5()
版本:
$Password = md5($_POST['password']);
当前,您正在比较$Password_db == $Password
$Password = $_POST['password']; //Not md5() hashed
$Password_db = $row['Password']; //md5() hashed
提示,您不应该使用md5()
因为它不安全。
为了确保安全,您将需要一个看起来像这样的工作流,而不是正在做什么:
password_verify($password, $storedHash)
继续。 不要将密码检查外包给SELECT查询。 不要存储纯文本密码。 不要使用MD5进行密码保护。 不要调用MD5加密。
推荐阅读:
password_hash()
和password_verify()
) 在这一行:
$Password = $_POST['password'];
需要更改为:
$Password = md5($_POST['password']);
因为您需要比较加密密码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.