Sql Injection

posted by Viralex | 20-Sep-2007 13:41

L'SQL Injection è una tecnica che sfrutta l'inefficenza o la mancanza dei controlli sull'input in query SQL.Un esempio può essere il login di un sito. Quando inseriamo il nick e la password, viene inviata al un database una query, in cui vengono cercate le stringhe del nick e della password, se sono presenti entrambe il login è riuscito.

Quando tentiamo di loggarci la query è simile a questa:
SELECT utente FROM tabellautenti WHERE user = ‘username’ and pass = ‘password’

Il comando SELECT serve a far visualizzare i dati indicati dal comando, FROM indica la tabella da cui vogliamo prendere i dati, mentre WHERE fa visualizzare i dati solo nel caso che questi corrispondano a quelli segnalati, in questo caso quando il valore di user è uguale a username e lo stesso per pass.
Per chi sa un pochino di mysql è una cosa semplicissima.

L'SQL Injection consiste nell’ inserire una parte di codice mysql nei campi di input(GET o POST) ad esempio se mettiamo come password "’ or 1=1"

Vediamo cosa succede:
SELECT utente FROM tabellautenti WHERE user = ‘username’ and pass = ‘’ or 1=1’

La condizione 1=1 messa nel campo password è sempre vera perciò non verrebbe restituito alcun segnale di errore, e noi verremmo autenticati come utenti registrati del sito, senza conoscere la password di accesso. Questo è solo un esempio dei numerosi comandi che possono essere introdotti
mediante SQL Injection, anche se ora come ora il comando ’ or 1=1 e altri simili per la maggior parte dei casi, non funzionano più.
Pensate a quanto può essere pericolosa questa : "' ; drop table users--"
Per proteggersi da questa vulnerabilità l'unica soluzione è eliminare la possibilità di inserire caratteri che possono essere utilizzati nell' injection.


comment by Viralex | 20-Sep-2007 14:38


Se avete un input numerico basta fare il cast a int!


page 1 - 1 comments