2016-10-25 1 views
-4

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

$pas_usr = mysqli_real_escape_string($koneksi, $_POST['pas_usr']); 
$pas_usr = password_hash($pas_usr, PASSWORD_BCRYPT); 

результат в колонке пароль шифруется

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

вот моя страница Логин:

//memulai session baru 
session_start(); 

//memanggil koneksi 
include "koneksi.php"; 

$username = $_POST['username']; 
$password = $_POST['password']; 
$username = stripslashes($username); 
$password = stripslashes($password); 
$username = mysqli_real_escape_string($koneksi, $username); 
$password = mysqli_real_escape_string($koneksi, $password); 
$hashquery = mysqli_fetch_assoc(mysqli_query($koneksi, "SELECT * FROM `user` WHERE log_usr = '$username'")); 
$hash=$hashquery['hash']; 

if(password_verify($password, $hash)){ 

$query = mysqli_query($koneksi, "SELECT * from user WHERE log_usr='$username'"); 
$exitCount=mysqli_num_rows($query); 
    if($exitCount==1){ 
      $data = mysqli_fetch_array($query); 
      $id = $data["log_usr"]; 
      $lvl = $data["sts_usr"]; 

      if ($lvl=='A') 
      { 
       $link = 'index.html'; 
      } 
      elseif($lvl='U') 
      { 
       $link = 'index.php'; 
      } 
     $_SESSION['username'] = $username; 
     header ("location:$link"); 
     exit(); 
    }else{ 
     echo "<script>alert('Username dan Password tidak valid.'); window.location = 'index.php'</script>"; 
    } 
}else{ 
    echo "<script>alert('Username dan Password tidak valid.'); window.location = 'index.php'</script>"; 
} 
+0

Где ваш метод password_verify()? пожалуйста, также покажите код, написанный на нем. –

+0

@PHPGeek [password_verify] (http://php.net/manual/en/function.password-verify.php) - это функция PHP –

+0

, вы ожидаете, что пользователь введет хешированный пароль? потому что вы вводите пользовательский ввод из '$ _POST ['password']' в '$ hash' –

ответ

0

password_verify соответствует вашему простому паролю с хешированной версией вашего пароля, когда вы проверяете простой пароль в обоих параметрах. password_verify работает следующим образом:

password_verify($plainPassword, $hashedPassword) 

<?php 
// See the password_hash() example to see where this came from. 
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq'; 

if (password_verify('rasmuslerdorf', $hash)) { 
    echo 'Password is valid!'; 
} else { 
    echo 'Invalid password.'; 
} 
?> 
+0

поэтому в базе данных у нас есть столбец для простого пароля и хэшированного пароля? – dogearmy69

+0

Я имею ввиду, что хешированный пароль должен храниться в базе данных тоже правильно? – dogearmy69

+0

На самом деле в базе данных вам нужно сохранить только хэшированную версию пароля, и, пока вы проверяете, вы должны проверить отправленный пользователем простой пароль на сохраненный хешированный с помощью 'password_verify'. Лучшая практика никогда не сохраняет простой пароль в базе данных. –