Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [login] il login funziona ma....

    Slave ragazzi...dopo aver creato un database di utenti con username e password e una pagina php di login per il riconoscimento(login.php) mi sono accorto che lo script php riconosce bene tutti gli utenti tranne il primo, il terzo, il quinto nell'ordine in cui sono stati registrati....
    Cosa può essere successo?

    Lo script è questo:

    codice:
    <html>
    <body>
    
    
    Codice PHP:
    <?php //Stabilisce una connessione al database// $conn=mysql_connect('localhost','lorenzo','neonato2000'); if(!$conn) echo "Errore nella connessione: mysql_error()"; //Stabilisce una connessione al database "lista_utenti_registrati"// mysql_select_db('lista_utenti_registrati',$conn)  or die("Errore nella selezione del database:"); //Verifico se i dati immessi sono presenti nel database// $query2="SELECT * FROM lista"; $result2=mysql_query($query2,$conn); while($row2 mysql_fetch_array($result2)){     if($user==$row2[username] and $pass==$row2[password]){              echo "ti ho riconosciuto $user ben venuto/a";              echo "<a href=http://localhost/inserimento_utenti/index.html>Torna alla pagina di registrazione</a>";             exit;             }         } //se il valore $result2=0 allora non esiste nessuna tabella nel database//     echo "devi registrarti";     echo "<a href=http://localhost/inserimento_utenti/index.html>Vuoi farlo ora?</a>"; ?>
    </body> </html>


    Grazie....

  2. #2
    Non e' certo il massimo estrarre dei record e poi scorrere il result set per vedere se esiste. Manco il meglio come sicurezza (estrarre tutto).... Prova a fare cosi':
    Codice PHP:
    //Verifico se i dati immessi sono presenti nel database//
    $query2 "SELECT * FROM lista
                   where username = '
    $user' AND password = '$pass' ";

    $result2 mysql_query($query2$conn);

    if(
    mysql_num_rows($result2) == )      {
          echo 
    "ti ho riconosciuto $user ben venuto/a";
          echo 
    "<a href=http://localhost/inserimento_utenti/index.html>Torna alla pagina di registrazione</a>";
          exit;
          }
           else { 
    //se il valore $result2=0 allora non esiste nessuna ricorrenza nella tabella//
                  
    echo "devi registrarti";
                  echo 
    "<a href=http://localhost/inserimento_utenti/index.html>Vuoi farlo ora?</a>";
                 } 


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Ciao pier.mac come sempre mi "illumini"...ti ringrazio proverò.

    Il fatto è che l'uso di where ancora non mi è familiare.
    Ma in questo caso ricerca nella lista l'utente con quei dati e assegna così alla variabile o un valore true o un valore false..giusto?

    Un'altra cosa, perchè il mio script, in quanto a sicurezza, non è il meglio?
    Cosa si rischierebbe con lo script che ho scritto?

    Ciao e grazie...

  4. #4
    Originariamente inviato da lorenz_italy
    Un'altra cosa, perchè il mio script, in quanto a sicurezza, non è il meglio?
    Cosa si rischierebbe con lo script che ho scritto?

    Ciao e grazie...
    Il discorso e' di base. Metti i dati in un db, i record potrebbero anche divenatare molti. Basicamente errato estrarre tutto per fare una ricerca in php quando il database e' preposto a cio'. Con questo presupposto gia' ampiamente sufficiente di per se stesso, aggiungi che sono dati riservati, meno si manipolano meglio e'.

    La pwd nel db andrebbe hashata con MD5() e direttamente comparata... In realta' ho preso dal tuo script, ma sarebbe piu' corretto usare COUNT()

    SELECT COUNT(*) FROM TABELLA
    WHERE user = '$user' AND pwd = MD5($pwd)

    ora se count = 1 lo user c'e' se > 1 hai un doppione, se = 0 non esiste. E senza estrarre un solo dato. Se per assurdo ti passassero un sql injection la risposta sarebbe un numero e non la lista dei tuoi utenti.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    quindi non devo fare una cosa del genere?

    Codice PHP:
    $controllo=SELECT COUNT(*) FROM TABELLA 
    WHERE user 
    '$user' AND pwd MD5($pwd)


    if (
    $controlloqualcosa.... 

  6. #6
    Niente piero.mac!!!!!

    Sto ancora fermo...ho riscritto lo script in questo modo, ma non succede nulla perchè stampando il valore $result non mi da nessun valore e quindi seleziona il secondo IF dicendomi che non ci sono utenti con quei dati; ho bisogno del tuo aiuto!!!

    codice:
    <html>
    <body>
    
    
    Codice PHP:
    <?php //Stabilisce una connessione al database// $conn=mysql_connect('localhost','lorenzo','neonato2000'); if(!$conn) echo "Errore nella connessione: mysql_error()"; //Stabilisce una connessione al database "lista_utenti_registrati"// mysql_select_db('lista_utenti_registrati',$conn)  or die("Errore nella selezione del database:"); $count="SELECT COUNT(*) FROM LISTA WHERE username = '$user' AND password = MD5($pass)"; echo "$count"; $result=mysql_query($count,$conn); echo "Il valore è $result";    if($result==1){         echo "ti ho riconosciuto $user ben venuto/a";          echo "<a href=http://localhost/inserimento_utenti/index.html>Torna alla pagina di registrazione</a>";         exit;         }else{     if($result==0){         echo "non esiste nessun utente con questi dati";         echo "<a href=http://localhost/inserimento_utenti/index.html>Torna alla pagina di registrazione</a>";         EXIT;         } }          ?>
    </body> </html>

  7. #7
    Scusa piero.mac, questo è l'ultimo script apparentemente giusto che ho provato.....ma non và comunque.



    codice:
    <html>
    <body>
    
    
    Codice PHP:
    <?php //Stabilisce una connessione al database//  $conn=mysql_connect('localhost','lorenzo','neonato2000'); if(!$conn) echo "Errore nella connessione: mysql_error()"; //Stabilisce una connessione al database "lista_utenti_registrati"//  mysql_select_db('lista_utenti_registrati',$conn)  or die("Errore nella selezione del database:"); $count="SELECT COUNT(*) FROM LISTA WHERE username = '$user' AND password = 'MD5($pass)'"; $result=mysql_query($count,$conn);   if(mysql_num_rows($result)==0){         echo "non esiste nessun utente con questi dati";         echo "<a href=http://localhost/inserimento_utenti/index.html>Torna alla pagina di registrazione</a>";         EXIT;             }else{             if(mysql_num_rows($result)==1){             echo "ti ho riconosciuto $user ben venuto/a";              echo "<a href=http://localhost/inserimento_utenti/index.html>Torna alla pagina di registrazione</a>";             exit;     } }          ?>
    </body> </html>
    Qualsiasi dato dò ai campi $user e $pass (in un form di un html da cui li invio a questo script) accetta il login, pur inserendo dati che nel mio database non ci sono per niente. Ma perchè?

  8. #8
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    lorenz_italy, se fai MD5($pass) per controllare la password è necessario che anche la pass inserita nel db sia stata hashata con MD5 prima di essere inserita.

    potrebbe essere un suggerimento banale, ma nn si sa mai!

  9. #9
    Ciao buba, grazie per avermi risposto.


    Cosa si intende per "hashare"?Cioè cosa fa MD5...non l'ho mica capito.

    Come si fa a "hashare" la password? La si deve hashare nello stesso script oppure nel form di invio?

    Grazie ciao...

  10. #10
    Utente di HTML.it L'avatar di buba88
    Registrato dal
    Feb 2004
    Messaggi
    538
    allora nella tabella lista hai le coppie user-name password.

    la password nel database, è la stessa che tu inserisci al momento del login, di conseguenza, se la password fosse pippo, quando la query deve fare il controllo fa:

    WHERE password=MD5(pippo)

    la funzione md5 restituisce l hash della stringa, di conseguenza tu avrai:

    WHERE password=stringacriptata

    questa condizione nn sarà mai vera, a meno che la password nn sia già hashata nel db.

    prova a fare cosi: acceti al tuo db con phpmyadmin ed esegui questa query:

    UPDATE LISTA SET PASSWORD = MD5(PASSWORD);

    dopo lo script dovrebbe funzionare

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.