0

J'essaie de créer un script login.php qui utilise le cryptage password_verify(). Aucun des sujets étaient clairs et le problème est que dans chaque exemple, il semble maintenant pour moi comme çaOù placer password_verify() dans php quand vous vous connectez et avez le registeration.php dans un fichier externe

$password = '123'; 
    $hashed = '$2y$10$Lz6eWEzHqhNhiPkNYX/LAOfP.1zuyYJSc4u66TvF1bce9WrSbnSJK'; 

    $ver_pass = password_verify($password, $hashed){..} 

la chose est que je suis en train de récupérer le mot de passe haché à partir d'une base de données et non d'une chaîne hardcoded interne . Mon exemple de code:

login.php

 $password = mysqli_real_escape_string($database, $password); 
    //Check username and password from database 
    $query = 
    "SELECT id FROM `register` 
       WHERE `username` = '$username' 
       AND `hashed_p` = '$password'"; 

     $result = mysqli_query($database,$query); 
     $row = mysqli_fetch_array($result,MYSQLI_ASSOC); 
     //If username and password exist in our database then create a session. 

      $verified_password = password_verify($password, $hashed_password); 

     if(mysqli_num_rows($result) && $verified_password){ 
     echo start session succesfully 
     }else{ echo error} 
    } 

register.php

$password = mysqli_real_escape_string($database, $password); 
$hashed_password = password_hash($password, PASSWORD_DEFAULT); 

$query = "SELECT email FROM register WHERE email='$email'"; 
$result = mysqli_query($database, $query); 
$row = mysqli_fetch_array($result, MYSQLI_ASSOC); 

$query = mysqli_query($database, 
"INSERT INTO `register` (`hashed_p`) VALUES ('".$hashed_password."')"; 
if ($query) {....} 

Soit dit en passant. Le processus d'enregistrement est réussi et le fichier password_hash() fonctionne correctement dans le fichier register.php. Mais dans le fichier login.php je ne sais pas comment récupérer le mot de passe hashé de la base de données et l'utiliser pour le vérifier. AAny help apprécié.

+1

vous devez sélectionner id & mot de passe _without_ checking for passoword. _Then_ vous vérifiez si le pwdHash de db ('$ row ['hashed_p']') correspond à celui que l'utilisateur a donné via password_verify. – Jeff

Répondre

2

Vous devez sélectionner le mot de passe id & sans vérifier le mot de passe. Ensuite, vous vérifiez si le pwdhash de db ($row['hashed_p']) correspond à celui que l'utilisateur a donné par l'intermédiaire password_verify:..

$password = // the password in it's raw form how the user typed it. like $_POST['password']; 
//Check username (without password) from database 
$query = 
"SELECT id, hashed_p FROM `register` 
        WHERE `username` = '$username'"; 

$result = mysqli_query($database,$query); 
$row = mysqli_fetch_array($result,MYSQLI_ASSOC); 
$verified_password = password_verify($password, $row['hashed_p']); 

if(mysqli_num_rows($result) && $verified_password){ 
    echo 'start session succesfully'; 
} else { 
    echo 'error'; 
} 

MAIS s'il vous plaît changer à un prepared statements (parce que votre version est très unsecure pourrait facilement être piraté Juste seach pour 'Bobby Tables'.):

$stmt = mysqli_prepare($database, $query); 
mysqli_stmt_bind_param ($stmt, 's', $username); 
$success = mysqli_stmt_execute($stmt); 
$result = mysqli_stmt_get_result($stmt); 
+0

Toutes les transactions sont non sécurisées si elles sont http –

+0

@MammaMia Je ne me suis pas référé à une transaction non sécurisée, mais à des injections SQL. – Jeff