Gli attacchi da iniezione di comandi SQL sono degli attacchi verso i siti web che si appoggiano su database relazionali.
In questo tipo di siti, alcuni parametri sono passati al dabase sotto forma di una richiesta SQL. In questo modo, se lo sviluppatore non ha effettuato nessun controllo sui parametri passati nella richiesta SQL, sarà possibile per un pirata modificare la richiesta per accedere alla totalità del database, fino a modificarne il contenuto.
In effetti, alcuni caratteri permettono di scatenare numerose richieste SQL oppure di ignorare il seguito della richiesta. Così, inserendo questo tipo di caratteri nella richiesta, un pirata può potenzialmente eseguire la richiesta da lui scelta.
Prendiamo ad esempio la richiesta seguente, utilizzando come parametro un nome d'utilizzatore :
SELECT * FROM utilizzatori WHERE nome="$nome";
Ad un pirata basterà inserire un nome come « toto" OR 1=1 OR nome ="titi » per far diventare la richiesta come segue :
SELECT * FROM utilizzatori WHERE nome="toto" OR 1=1 OR nome ="titi";
In questo modo, con la richiesta qui sopra, la clausola WHERE è sempre rispettata, il che significa che girerà le registrazioni corrispondenti a tutti gli utilizzatori.
In aggiunta, alcuni sistemi di gestione di database come Microsoft SQL Server possiedono delle procedure immagazzinate che permettono di lanciare dei comandi d'amministratore. Queste procedure immagazzinate sono potenzialmente pericolose nella misura in cui possono permettere ad un utilizzatore malintenzionato di eseguire dei comandi di sistema, che possono portare ad un'eventuale intrusione.
Alcune regole permettono di premunirsi dagli attacchi da iniezione da comandi SQL :