Не могу войти с зашифрованным паролем из базы данных

Я могу зашифровать свой пароль с помощью 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;}?>

1

Решение

Ты забыл md5() пароль перед сравнением, вам нужно сравнить md5() версия:

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

В настоящее время вы сравниваете $Password_db == $Password

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

Просто совет, вы не должны использовать md5() как это не безопасно.

2

Другие решения

Вместо того, что вы делаете, чтобы быть в безопасности, вам нужен рабочий процесс, который выглядит примерно так:

  1. Получить идентификатор пользователя и пароль-хэш из базы данных для данного клиента.
  2. Если password_verify($password, $storedHash), продолжить.

Не передавайте проверку пароля на запрос SELECT. Не храните незашифрованные пароли. Не используйте MD5 для защиты паролем. Не называйте шифрование MD5.

Рекомендуемое чтение:

2

В этой строке:

$Password = $_POST['password'];

Нужно изменить на:

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

Потому что вам нужно сравнить шифрование passowrds.

0
По вопросам рекламы [email protected]