View Single Post
Old 11-03-2006, 10:45   #9
ekerazha
 
Messaggi: n/a
Ciao...

SQL Injection è una tecnica che viene utilizzata sfruttando un'errata gestione dei dati ricevuti in input da una pagina (attraverso metodo GET, POST o COOKIES) e che vengono successivamente utilizzati all'interno di una query al database.

es. stupido in PHP:

Codice PHP:
$query "SELECT * FROM database WHERE $password='$_POST['pass']'"
Capirai bene che se io passo invio al database una query utilizzando al suo interno quello che ricevo attraverso $_POST['pass'] , un utente simpatico potrebbe inserire un $_POST['pass'] apposito con l'intenzione di alterare la query finale.

Es. se io invece di
Quote:
mia_password
inserisco
Quote:
' OR username='pippo
la query finale risulta
Codice:
SELECT * FROM database WHERE $password='' OR username='pippo'
Quindi nel caso specifico potrò visualizzare i dati associati ad una determinata password, non conoscendo la password bensì il semplice username (ho utilizzato una cosa simile in una pagina del sito della mia scuola ancora alle superiori eheh).

Per evitare cose come queste ti puoi (ti devi) aiutare con le già citate funzioni messe a disposizione dai vari linguaggi (ad esempio in PHP addslashes() etc.) ma non sempre queste funzioni risolvono completamente le cose, perchè vi potrebbero essere casi in cui, in base alla gestione che viene fatta dei dati in input, non è necessario utilizzare gli apici per alterare una query (es. potrei concatenare una UNION SELECT ad una SELECT la cui condizione WHERE finale utilizza per il confronto un valore intero e non una stringa). Insomma non esiste la "soluzione" per eccellenza, devi stare molto attento a come gestisci i dati ricevuti in input per fare in modo che, indipendentemente dalla loro conformazione, non possano alterare la query al database nella quale li utilizzerai.

Ultima modifica di ekerazha : 11-03-2006 alle 10:47.
  Rispondi citando il messaggio o parte di esso