Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316

    probema password_hash / password_verify

    ciao..dunque..ho un'area riservata e per accedervi servono username e password. entrambe sono criptate con password_hash (al momento della creazione dell'utente). Nella pagina di login, l'utente inserisce le credenziali che vengono verificate con i dati nel db tramite password_verify. questo è il mio codice che non funziona. il problema dovrebbe essere nell'if ma non riesco a vederlo.

    codice:
    $usr = retrieveLOGINdata(); //estrae i dati dal db
    
    $data = array();
    while($value = mysqli_fetch_row($usr))
        array_push($data,$value);
    
    if(password_verify($_POST['usrname'], $data[0][0]) && password_verify($_POST['usrpw'], $data[0][1]))
    {
    echo "ok sei loggato";
     }
    ho verificato che:

    - dalla pagina di login, i dati arrivano corretti
    - i dati estratti dal db sono corretti
    - se usrname e usrpw sono uguali funziona

    grazie e Buon Natale!
    L.

  2. #2
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Puoi postare tutti i valori di $_POST['usrname'], $_POST['usrpw'], $data[0][0] e $data[0][1]?

  3. #3
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    ciao, certamente

    $_POST[usrname] = 'ciao'
    data[0][0] = $2y$10$tAqwnx5nVenUWvBnQIQRyuhrK8gR5RAqN3SZBQAjsFY LH/PjJlICy

    $_POST[usrpw] = 'blub'
    data[0][1] = $2y$10$EyUJnAjgzw.mS5nt0KJtdO7wJORRiZmZheY39QWcBP2 qihlbOh1/G

    ciao
    L.

    aggiungo: se provo a stampare password_hash('ciao', PASSWORD_DEFAULT) mi da effettivamente un risultato diverso rispetto a quello che ha memorizzato nel db. lo stesso vale se faccio con 'blub'

    questo è il codice che uso per criptare e inserire i dati nel db

    codice:
    $criptedPW = password_hash($_POST['usrname'], PASSWORD_DEFAULT); //HASH
    $criptedNAME = password_hash($_POST['usrpw'], PASSWORD_DEFAULT);// HASH
    
    $sql="INSERT INTO users (usrname, usrpw) 
        VALUES('$criptedNAME','$criptedPW')";
    Ultima modifica di leaf; 25-12-2014 a 19:08

  4. #4
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    La mia teoria iniziale era che non salvavi in modo completo l'hash nel database (è capitato pure a me, dato che si solito si scelgono campi con una lunghezza di 32 caratteri per contenere l'hash, mentre password_hash restituisce sempre una stringa di 60 caratteri), ma nel tuo caso ne hai pure uno in più. Quello spazio che c'è nei due hash esiste realmente oppure è frutto in un copia e incolla fatto male qui sul forum?

    se provo a stampare password_hash('ciao', PASSWORD_DEFAULT) mi da effettivamente un risultato diverso rispetto a quello che ha memorizzato nel db.
    Quello non è un problema, leggi la documentazione di password_hash per saperne di più.

  5. #5
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    Ciao, dunque..il campi del db sono varchar(255)..di che spazio parli? Se é lo spazio fra l'uguale e l'hash l'ho aggiunto io qui, non c'è nel db. Come dicevo sopra, se creo un utente con usrname e usrpw uguali funziona correttamente..se sono diversi invece mi da errore..
    Grazie
    L.

  6. #6
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    $2y$10$tAqwnx5nVenUWvBnQIQRyuhrK8gR5RAqN3SZBQAjsFY LH/PjJlICy
    ----------------------------------------------------------^

    Questo è un hash invalido a prescindere, è stato salvato male?

  7. #7
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    Mmm..perché é invalido? L'ho stampato con echo e l'ho copiato qui..può darsi che si sia salvato male ma ho fatto più prove e mi da l'errore..

  8. #8
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    L'ho scritto sopra:
    password_hash restituisce sempre una stringa di 60 caratteri), ma nel tuo caso ne hai pure uno in più.
    Se conti i caratteri dei due hash sono 61 caratteri. Adesso, il problema potrebbe essere pure dovuto ad altre cause (me ne vengono in mente diverse), ma prima di iniziare ad escluderle una per una fammi il piacere di controllare con echo strlen($data[0][0]); se restituisce 60 o 61.

  9. #9
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    Ok, lo faccio domani quando torno a casa. Grazie mille intanto ��
    L.

  10. #10
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    ok allora..ho visto che postando qui gli hash si è inserito uno spazio (nel caso di $data[0][0], a FY LH) che in realtà non c'è negli hash.(era quello di cui parlavi?)..quindi strlen restituisce 60 per entrambi
    grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.