2

我可以用 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;


} 


?>
4

3 回答 3

2

您在比较之前忘记md5()了密码,您需要比较md5()版本:

$Password = md5($_POST['password']);

目前,您正在比较$Password_db == $Password

$Password = $_POST['password']; //Not md5() hashed
$Password_db = $row['Password']; //md5() hashed

只是一个提示,你不应该使用它,md5()因为它不安全。

于 2016-03-07T14:38:38.873 回答
2

为了安全起见,您需要一个看起来像这样的工作流程,而不是您正在做的事情:

  1. 从数据库中获取给定客户的用户 ID 和密码哈希。
  2. 如果password_verify($password, $storedHash),继续。

不要将您的密码检查外包给 SELECT 查询。不要存储明文密码。不要使用 MD5 进行密码保护。不要调用 MD5 加密。

推荐阅读:

于 2016-03-07T18:41:28.693 回答
0

在这一行:

$Password = $_POST['password'];

需要改为:

$Password = md5($_POST['password']);

因为您需要比较加密密码。

于 2016-03-07T14:38:31.793 回答