Esistono molte guide al riguardo, però ho cercato di essere più chiaro possibile in questa guida, al contrario di molte altre che in fin dei conti non spiegano niente, è solo la parte teorica (più o meno).

L’SQL Injection è una tecnica che sfrutta l’inefficenza (o la totale mancanza) dei controlli sull’input in query SQL. Faccio un esempio pratico, osserviamo i campi di login presenti in molti siti internet. Ora, quando inseriamo il nick e la password, viene inviata ad un database una richiesta (query), in questo caso vengono cercate all’interno del database le stringhe del nick e della password, se sono presenti il login è riuscito, altrimenti viene mostrato un errore.
Ora analizziamo ciò che abbiamo fatto. Quando tentiamo di loggarci ad un sito, viene inviata una query al database simile a questa qui sotto:

SELECT dati_utente FROM tabella_utenti WHERE user = ‘username’ and pass = ‘password’

analizziamo questo codice. Nel programma SQL, 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.
Ma che succederebbe se noi al posto di password mettessimo ad esempio: ’ or 1=1???
Ora vediamo come questa stringa viene elaborata dal database.

SELECT dati_utente FROM tabella_utenti WHERE user = ‘username’ and pass = ‘’ or 1=1’

La condizione 1=1 messa nel campo password risulta 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ù.
Per proteggersi da questa vulnerabilità risultano assolutamente inutili i controlli sulle stringhe posti da script, perciò l’unico metodo possibile è quello di eliminare la possibilità di inserire caratteri che possono essere utilizzati in questo tipo di injection, come ad esempio l’apice (‘).