Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034

    SELECT e trim delle variabili

    ciao

    com'è che con

    Codice PHP:
    $user $_POST['username'];
    $pass $_POST['password'];
              
    $result mysql_query("SELECT COUNT(*) FROM Utenti WHERE Username = '$user' AND Password = '$pass'",$db); 
    la query funziona anche se inserisco uno spazio alla fine di user e/o pass?

  2. #2
    Utente di HTML.it L'avatar di alegia76
    Registrato dal
    Mar 2003
    Messaggi
    1,179
    Perchè lo spazio non lo stai mettendo nel contenuto di $user, ma semplicemente alla fine di $user, e allora lo spazio viene interpretato non come carattere del contenuto
    Sei l'eventualità di un'anomalia che nonostante i miei più onesti sforzi non sono stato in grado di eliminare da quella che altrimenti sarebbe un'armonia di precisione matematica..

  3. #3

    Re: SELECT e trim delle variabili

    Originariamente inviato da meganoide
    la query funziona anche se inserisco uno spazio alla fine di user e/o pass?
    La query funziona (perche' non dovrebbe) ma se hai uno spazio da una parte e dall'altro no il COUNT(*) estrae 1 record con valore zero. Una riga il count() la rende sempre comunque.

    in pratica devi valutarlo se esiste o meno il record leggendo il campo estratto.

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

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034
    attualmente faccio

    Codice PHP:
    $result mysql_query("SELECT COUNT(*) FROM Utenti WHERE Username = '$user' AND Password = '$pass'",$db);
    $row mysql_fetch_row($result);
    if (
    $row[0] == 1) {
    //registro la sessione se no niente 
    Dovrei modificare la query togliendo il count ?

  5. #5
    Originariamente inviato da meganoide
    attualmente faccio

    Codice PHP:
    $result mysql_query("SELECT COUNT(*) FROM Utenti WHERE Username = '$user' AND Password = '$pass'",$db);
    $row mysql_fetch_row($result);
    if (
    $row[0] == 1) {
    //registro la sessione se no niente 
    Dovrei modificare la query togliendo il count ?
    perche' mai? la query che fai ed il controllo e' corretto. Piuttosto fai in modo che non ci sia mai uno spazio ne prima ne dopo. Un bel trim() sia quando inserisci sia quando confronti.

    Basico... se da una parte hai uno spazio e dall'altra no la stringa e' diversa. Siccome uno spazio prima o dopo non e' un carattere da ammettere in user e password tu toglilo a priori.

    Be' in realta' nella password hashata con MD5() ci potrebbe anche stare.... ma personalmente preferisco di no e vado giu' di TRIM()

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

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034
    ma intendi di mettere trim prima della select ?

    $user = trim($_POST['username']);
    $pass = trim($_POST['password']);

    perchè fa lo stesso difetto, sia che lo spazio lo inserisco all'inizio sia alla fine di user e pass.

  7. #7
    Originariamente inviato da meganoide
    ma intendi di mettere trim prima della select ?

    $user = trim($_POST['username']);
    $pass = trim($_POST['password']);

    perchè fa lo stesso difetto, sia che lo spazio lo inserisco all'inizio sia alla fine di user e pass.
    guarda che sinora non ho capito se conta 1 oppure zero. Occhio che potrebbe anche contare 2.....

    quando inserisci il valore lo TRIMMI, quando lo controlli come nell'esempio che hai fatto lo TRIMMI again....

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

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034
    conta 0 se non trova il record (per esempio, user e/o pass errati)
    conta 1 se lo trova
    conta 2 se c'è un doppione

    Nella pagina faccio solo un controllo con la select (con i trim come ho scritto) e nessuna insert: quindi, con lo spazio prima/dopo, il valore di user/pass dovrebbe essere completamente differente? e invece prende lo stesso il record dalla tabella (quindi count=1) :master:

  9. #9
    l'insert lo fai quando inserisci i dati nella tabella.....

    di solito la password viene passata ad una funzione che produce un hash, e qui lo spazio farebbe parte della stringa e la differenza ci sarebbe di sicuro con un hash completamente diverso.

    Ripeto che non ho capito qual'e' il tuo problema.... se hai un campo VARCHAR che contiene una stringa seguita da uno spazio allora lo spazio fa parte della stringa.

    quindi se hai "pippo " con lo spazio, questo sara' diverso da "pippo" senza spazio finale.

    fai un esempio banale:

    "pippo " = "pippo" ti rende?
    "pippo" = "pippo " ti rende?

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

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034
    per il momento lascio stare md5, le pw sono in chiaro.
    Assumendo che la pw, nel proprio campo (varchar), è memorizzata come "pippo" (senza virgolette e senza spazi) compilando il login mi fa entrare sia se scrivo "pippo" che "pippo " (con lo spazio finale)

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.