不能与加密口令从数据库
登录我可以通过简单地围绕它包装加密我用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;
}
?>
在这一行:
$Password = $_POST['password'];
需要改变:因为你需要比较加密passowrds
$Password = md5($_POST['password']);
。
我试过了。这没有用! – steve
这不是加密。 –
你忘了在比较之前md5()
密码,则需要比较md5()
版本:
$Password = md5($_POST['password']);
目前,你是比较$Password_db == $Password
$Password = $_POST['password']; //Not md5() hashed
$Password_db = $row['Password']; //md5() hashed
只是一个提示,你应该”不使用md5()
,因为它不安全。
而不是你在做什么,是安全的,你会想要一个工作流程看起来是这样的:
- 抓斗从数据库中的用户ID和密码的哈希值,对于给定的客户。
- 如果
password_verify($password, $storedHash)
,继续。
请勿将您的密码检查外包给SELECT查询。不要存储明文密码。不要使用MD5进行密码保护。不要调用MD5加密。
推荐阅读:
-
How to safely store your users' passwords(使用
password_hash()
和password_verify()
) - How to prevent SQL injection(使用预处理语句)
- The correct cryptography terminology(MD5不是加密算法)
感谢您的回复。我用它来处理password_verify()。 – steve
你不在将密码传递给SQL查询进行比较之前再次输入密码... –
以及如何我做这个? – steve
更改$ Password = mysqli_real_escape_string($ connection,$ Password);到$ Password = md5($ Password); –