2017-08-24 2 views
1

Ich entwickle ein Login-System für eine iOS-App.Verwendung von password_verify in PHP

Dies ist Teil des PHP-Skript, das ich eine JSON Antwort auf die App senden bin mit:

if(isset($_POST['correo']) && isset($_POST['pass']) && $_POST['key'] == "123456") 
{ 


    $password = $_POST['pass']; 



    $q = mysqli_query($mysqli,"SELECT * FROM users WHERE email = '".$_POST['correo']."' AND 
    encrypted_password = '".$_POST['pass']."'") or die (mysqli_error()); 

    if(mysqli_num_rows($q) >= 1){ 
     $r = mysqli_fetch_array($q); 

// this is the hash of the password in above example 
      $hash = $r['encrypted_password']; 

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

       $results = Array("error" => "1","mensaje" => "su ID es ".$r['id'],"nombre" => $r['nombre'],"apellidos" => $r['apellidos'],"email" => $r['email'], 
     "imagen" => $r['imagen'],"unidad" => $r['unidad']); 

      } else { 
       $results = Array("error" => "2","mensaje" => " acceso denegado "); 
      } 

    }else{ 
     $results = Array("error" => "3","mensaje" => "no existe"); 
    } 

} 

echo json_encode($results); 

Mein Problem über die Verwendung von password_verify in PHP ist. Ich möchte wissen, ob es wie im Skript funktioniert oder nicht, dann wird die JSON-Antwort in der App nicht empfangen.

Danke

+4

Ihre mysqli_query wird immer Rückkehr leeres Ergebnis, da Sie übergeben, um unverschlüsselten Wert abzufragen und zu versuchen, es gleich zu verschlüsseln 'verschlüsseltes_Kennwort = '". $ _ POST [' pass '] ' – diavolic

+1

Bitte parametrieren Sie Ihre Abfragen. – chris85

+0

Wie haben Sie die Benutzerkennwörter ursprünglich gespeichert? 'verschlüsselt'! =' hahsed' (es sollte gehashed werden). – chris85

Antwort

1

Sie brauchen nicht password in WHERE Zustand entsprechen, so etwas wie:

$q = mysqli_query($mysqli,"SELECT * FROM users WHERE email = '".$_POST['correo']."'") or die (mysqli_error()); 

     if(mysqli_num_rows($q) >= 1){ 
       $r = mysqli_fetch_array($q); 



       // this is the hash of the password in above example 
       $hash = $r['encrypted_password']; 

       //you need to match the password from form post against password from DB using password_hash  

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

Um SQL Injection Verwendung zu verhindern parametrisiert Abfragen Ref: How can I prevent SQL injection in PHP?

+0

... und SQL-Injektion hier, 'WHERE email = '". $ _ POST [' correo ']. "'" ' – chris85

Verwandte Themen