[PHP] Verifica password per accesso ad area riservata

gandalf1959

Utente Attivo
21 Nov 2013
203
1
18
Buongiorno,
rieccomi qui. Sto aggiornando un po' di pagine per aggiornare tutto da MySql a MySqli.
Nel frattempo ho cambiato la codifica delle password degli utenti autorizzati ad accedere all'area riservata.
Nel codice scritto un paio di anni fa la codifica era sha1, adesso ho inserito alcuni utenti utilizzando password_hash.
Risultato: nella tabella con gli utenti in questione alcune password sono codificate in un modo, altri in un altro.
Allora ho cambiato il file di verifica che viene richiamato dopo aver inserito le credenziali di accesso con un doppio controllo.
Però non funziona con le nuove password (quelle inserite con password_hash).
Questa è la pagina di verifica:

PHP:
<?php session_start();

include 'connect3.php';


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

//sha1 cifra la password anche qui in questo modo corrisponde con quella del db
$password = sha1($pwd);

// qui invece ricavo la password con la nuova codifica
$hashedpassword = password_hash($pwd, PASSWORD_DEFAULT);



if (!$result = $connessione->query("SELECT * FROM utentibo WHERE userName = '$username' AND (password = '$password' OR password = '$hashedpassword')")) {
  echo "Errore della query: " . $connessione->error . ".";
  exit();
}else{
    // echo "e qui ancora bene"."<br>";
  // conteggio dei record
  if($result->num_rows > 0) {
    // conteggio dei record restituiti dalla query
    while($row = $result->fetch_array(MYSQLI_ASSOC))
    {
      $cod = $row['userName'];
      //$unico = $row['unico'];
      
      if ($cod == "") {
          $trovato = 0;
      }else{$trovato = 1;}

      /* Username e password corrette */
        if($trovato === 1) {
 
         /*Registro la sessione*/
        $_SESSION['autorizzato'];
 
        $_SESSION["autorizzato"] = sha1($cod + $unico);
 
        /*Registro il nome dell'utente*/
        $_SESSION['cod'] = $cod;
 
         /*Redirect alla pagina riservata*/
        echo '<script language=javascript>document.location.href="partenza.php"</script>';
 
        } else {
 
        /*Username e password errati, redirect alla pagina di login*/
        echo '<script language=javascript>document.location.href="index.php"</script>';
 
        }
    }
    // liberazione delle risorse occupate dal risultato
    $result->close();
  }
}
// chiusura della connessione
$connessione->close();



?>
Ovviamente qualcosa non va in quanto tutto si ferma su questa pagina senza alcun redirect...

Dove sbaglio?
Grazie
Maurizio
 

macus_adi

Utente Attivo
5 Dic 2017
1.141
65
48
IT/SW
Fai un doppio controllo, se hai un sistema ibrido..... controlla il match sia in sha1 che con password_hash.... Se trovi alemeno 1 record allora hai fatto bingo!
 
Ultima modifica:

Ettore Caputo

Nuovo Utente
16 Giu 2019
2
0
1

marino51

Utente Attivo
28 Feb 2013
2.711
140
63
Lombardia
credo che tu debba verificare la password leggendola dal db e confrontando le due stringhe con la funzione password_verify
generata nuovamente ogni volta, come fai nello script, differisce perché cambiano i parametri di generazione

ti conviene cambiare la logica, leggi dal db e confronti le psw ottenute ciascuna con il metodo specifico
 
Ultima modifica: