2016-03-07 11 views
0

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


} 


?> 
+2

вы не MD5'ing пароль еще раз, прежде чем передавать его в SQL-запрос для сравнения ... –

+0

и как ma Я делаю это? – steve

+0

Изменить $ Password = mysqli_real_escape_string ($ connection, $ Password); до $ Password = md5 ($ Password); –

ответ

0

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

$Password = $_POST['password']; 

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

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

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

+0

Я пробовал это. Это не сработало! – steve

+0

Это не шифрование. –

2

Вы забыли пароль md5() перед сравнением, вам необходимо сравнить версию md5():

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

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

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

Просто наконечник, вы должны» t используйте md5(), так как он не защищен.

+0

@steve Если это не работает (что не должно быть), попробуйте повторить значения '$ Password' и' $ Password_db', чтобы дважды проверить значения. – Panda

+0

Спасибо, Luweigi. Какой метод шифрования вы рекомендуете? – steve

+1

@steve Я бы порекомендовал 'password_verify()', как указано в ответе Скотта – Panda

2

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

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

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

Рекомендуемая литература:

+1

Спасибо за все ответы. Я получил его работу с password_verify(). – steve