Gli attacchi effettuati ai siti web attraverso sql injection devono essere bloccati attraverso la riscrittura del codice sorgente, al fine di evitare l’utilizzo diretto dei parametri passati attraverso querystring o post nelle query sql: su questo argomento si trova molta letteratura online.
Tuttavia ci sono casi dove questa attività potrebbe essere troppo dispendiosa, se non impraticabile (magari non abbiamo sviluppato noi il sito e lo dobbiamo solo erogare).
In questi casi si può tamponare l’attacco considerando il fatto che questi attacchi nella maggior parte dei casi prevedono l’iniezione di uno script sql che:
-
legge l’elenco delle tabelle e delle colonne da sysobects e syscolumns sulla database corrente, sfruttando la connessione attiva
-
crea dinamicamente procedure di update sui campi testo, appendendovi del codice javascript (che, una volta visualizzato dai browser lancerà a suo volta del codice maligno)
Facendo girare la webapplication con un utente sql che NON ABBIA i permessi di lettura su sysobjects e syscolumns il problema può essere tamponato.
Ovviamente il problema persiste nel caso in cui l’attaccante conosca la struttura del vostro database, anche se è un caso molto più raro (di norma si tratta di worm, non di attacchi mirati).