2016-07-17 1 views
-4

signup.phpне сравнится с md5 пароля из базы данных

$password_unencrypted = $_POST['passwd']; 

$password=md5($password_unencrypted); 

$query = "INSERT INTO Customers (firstname, lastname, username, password, " .  "gender,mobile,email) " .  "VALUES ('$first_name', '$last_name', '$user_name', '$password', " .  " '$gender','$mobile','$email')"; 

login.php

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

$sql = ("select * from Customers where username='".$username."' and password='".$password."'") or die('Error connecting to MySQL server.'); 

    $query = mysqli_query($con,$sql); 

    $result=mysqli_fetch_row($query); 



     if($result) 
     {    
      $_SESSION['username']=$username; 
      header('location:home.html');   
     } 
     else 
     { 
      echo md5($_POST['password']); 
      echo 'Your entered username or password is incorrect'; 
     } 

В выше регистрации и входа в систему кодов Я ходатайствующих md5 пароля хранения

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

t для входа на страницу он не работает

FYI: echo md5 ($ _ POST ['password']); в login.php показывает тот же пароль, хранящийся в базе данных

+5

Используйте [встроенные функции для обработки паролей] в PHP (HTTP://php.net/manual/en/ref.password.php) ([учебник] (http://jayblanchard.net/proper_password_hashing_with_PHP.html)). Если вы используете версию PHP менее 5.5, вы можете использовать пароль_hash() [пакет совместимости] (https://github.com/ircmaxell/password_compat). Вы также должны использовать параметризованные запросы, с помощью заполнителей вместо конкатенации переменных непосредственно в строку запроса. – JimL

+0

Рекомендуемое чтение: [Stackoverflow: почему бы не использовать MD5 для хеширования паролей?] (Http://stackoverflow.com/questions/30496061/why-not-use-md5-for-password-hashing) –

+2

1. Не используйте MD5 или SHA-1, используйте функцию SHA-2, такую ​​как SHA-256. 2. Не используйте статическую соль, каждая запись, использующая один и тот же пароль, будет иметь одну и ту же соль, поэтому, когда вы обнаружите, что все остальные также открыты, используйте случайную соль, которая также сохраняется в БД. 3. Не просто конкатенировать соль, используйте функцию HMAC. 4. необходимо выполнить итерацию функции хэширования, потому что вычисление хэшей происходит очень быстро. 5. Используйте стандартные функции деривации пароля, такие как 'Crypto.HashPassword',' PBKDF2', 'password_hash',' bcrypt', скрипт и т. Д. – zaph

ответ

1

вот это как исправить код login.php

вы были полностью проверки неправильно, то вы должны проверить в первую очередь, если запрос Преемник работает, то проверьте, возвращаются строки больше, чем 0, это означает, что имя пользователя верное, и мы переходим к проверке пароля, если все в порядке, мы начинаем сессию, если у вас есть session_start() поверх вашей страницы, если не добавить ее до $_SESSION['username'] = $username; проверить руководство по password_hash() и password_verify()

on register.php изменить сохранность пароля в базе данных $password = md5($_POST['password']); к $password = password_hash($_POST['password'], PASSWORD_DEFAULT);

<?php 
if isset($_POST['submit']) { 
$username= mysqli_real_escape_string($con, trim($_POST['username'])); 
$password = trim($_POST['password']); // no need to sanitize the password 

$sql = "select * from Customers where username = '" .$username."' "; // you don't need or Die() it's just a string 
    if ($result = mysqli_query($con,$sql)) //check if the Query succeeded running 
    { 
    $count = mysqli_num_rows($result); 
     if($count > 0) 
     { // if username exists we proceed to checking password 
     $fetch = mysqli_fetch_assoc($result); 
     $hashedpassword = $fetch["password"]; 

      if (password_verify($password, $hashedpassword)) 
      { //checking password 
      $_SESSION['username']=$username; 
      header('location:home.html'); 
      exit; 
      }else { 
        echo "incorrect username or password"; // you don't want to tell him that the username is fine but the password is not correct 
      }      
      } else { 
      echo "incorrect username or password"; 
     }  
    } else { 
      echo 'Query failed to run'; 
     } 
}    
?> 
0

signup.php

$password_unencrypted = $_POST['passwd']; 

$hashed_password = password_hash($password_unencrypted,PASSWORD_DEFAULT); 



$query = "INSERT INTO Customers (`firstname`, `lastname`, `username`, 
      `password`, `gender`, `mobile`, `email`) VALUES ('$first_name', '$last_name', 
      '$user_name', '$hashed_password', '$gender', '$mobile', '$email')"; 

login.php

<?php 
if isset($_POST['submit']) { 

    $password = $_POST['password']; 
    $username=$_POST['username']; 

    $sql = ("select * from Customers where username='".$username."'") or die('Error connecting to MySQL server.'); 
    $result = mysqli_query($con,$sql); 
    $row = mysqli_fetch_assoc($result); 

// $result= mysqli_fetch_row($query); 
    if (password_verify($password, $row['password'])) 
    { 

     $_SESSION['username'] = $username; 
     header('location:home.html');   
    } 
    else 
    { 
     echo 'Your entered username or password is incorrect'; 
    } 
    }