Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776

    SQL injection, preparare la sentenza sql

    Ciao a tutti,

    sto cercando una soluzione al mio problema, dato questo codice:
    Codice PHP:
    <?phpinclude_once "classi/ClassDB.php";
    $sql="select * from usuarios where login='".$_POST["nome"]."' and password='".$_POST["password"]."'";
    $risultato=new DB($sql);
    $linea=$risultato->getLinee();
    if(
    $linea!=null){    
    session_start();    
    $_SESSION['nomeUtente']=$linea['nombre'];
    }
    header("location:index.php");
    ?>
    C'e' la possibilta di verificare le variabili $_POST["nome"] e $_POST["password"] in modo da evitare che l'utente inserisca codice sql all'interno della mia sentenza assegnata alla variabile $sql?
    ...prima di passarla come parametro quando istanzio la classe 'new DB($sql)'.

    Grazie,
    Roberto

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Prima cosa. Se il codice utente è lungo 10 caratteri ad esempio perché non limitare la stringa a 10 caratteri. Difficile immettere del SQL cosi. Stessa cosa per la password.
    Codice PHP:
    $nome substr($_POST["nome"],1,10); 
    Seconda cosa. Usare md5 o altra funzione di criptaggio. Li puoi anche non avere limiti di caratteri.
    Ovviamebnte nel db i dati devono essere stati registrati con lo stesso criptaggio. Ovviamente bis, devi anche avere un campo utente in chiaro.
    Codice PHP:
    $nome md5($_POST["nome"]); 
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Prima cosa. Se il codice utente è lungo 10 caratteri ad esempio perché non limitare la stringa a 10 caratteri. Difficile immettere del SQL cosi. Stessa cosa per la password.
    Codice PHP:
    $nome substr($_POST["nome"],1,10); 
    Seconda cosa. Usare md5 o altra funzione di criptaggio. Li puoi anche non avere limiti di caratteri.
    Ovviamebnte nel db i dati devono essere stati registrati con lo stesso criptaggio. Ovviamente bis, devi anche avere un campo utente in chiaro.
    Codice PHP:
    $nome md5($_POST["nome"]); 
    Io vorrei evitare che l'utente possa scrivere una cosa del genere e che le due variabili assumano questi valori:
    codice:
    $_POST["nome"]="a' or 'b'='b";
    $_POST["password"]="a' or 'b'='b";
    data la stringa:
    codice:
    $sql="select * from miaTabella where login='".$_POST["nome"]."' and password='".$_POST["password"]."'";
    Per cui la select risultante sarebbe:

    codice:
    select * from miaTabella where login='a' or 'b'='b' and password='a' or 'b'='b'

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Basta fare l'escape delle stringhe, con mysql_real_escape_string() o equivalente

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.