Stiamo lavorando su un semplice modulo di login / registrazione. Il nostro script di accesso controlla se il nome utente e la password esistono nella stessa riga del database. Se esiste, portiamo l'utente a una pagina di benvenuto.
Tuttavia, il nostro problema si trova quando controlliamo se la password esiste nel database perché abbiamo applicato la funzione password_hash () alla password inviata dall'utente. Questo metodo di crittografia è a senso unico e non reversibile (a mia conoscenza). Ecco il codice per lo script di accesso:
<?php
//will correspond with 'loginLogin.html page
require("opendboLogin.php");
$user = $_POST['username'];
$password = $_POST['password'];
$stmt2 = $conn->stmt_init();
$stmt2 = $conn->prepare("SELECT * FROM login WHERE alogin = ? AND apassword = ?");
$stmt2->bind_param("ss", $user, $password);
$stmt2->execute();
$stmt2->store_result();
$numberofrows = $stmt2->num_rows; //this is an integer!!
$stmt2 -> close();
if($numberofrows > 0) //if username and password combination exists in a row
{
echo 'login successful!';
}
else
{
echo 'Incorrect username and/or password, dumbass!';
}
?>
Stavo pensando che potremmo crittografare la password di nuovo all'interno di questo script e vedere se i due hash corrispondono, tuttavia la crittografia cambia ogni volta indipendentemente dal fatto che la stessa password esatta sia stata sottoposta a hash!
A partire da ora la combinazione username / password non esisterà mai e colpirà sempre l'ultima istruzione "else". Qualche idea su come verificare la combinazione nome utente / password corretta?