Il principio che sta dietro l’iniezione SQL è piuttosto semplice. Quando un’applicazione immette i dati dell’utente come input, esiste l’opportunità per un utente malintenzionato di immettere dati accuratamente predisposti per fa sì che l’input venga interpretato come parte di una query SQL anziché di dati.
Cosa prevenire gli attacchi di SQL Injection
Le precauzioni più importanti sono la disinfezione e la convalida dei dati, che dovrebbero già essere presenti. La disinfezione di solito comporta l’esecuzione di qualsiasi dato inviato tramite una funzione (come la funzione <mysql_real_escape_string ()> di MySQL) per garantire che i caratteri pericolosi non vengano passati ad una query SQL nei dati.
La convalida è leggermente diversa, in quanto tenta di garantire che i dati inviati siano nella forma prevista. Al livello più elementare ciò include la garanzia che gli indirizzi di posta elettronica contengano un segno “@”, che vengano fornite solo cifre quando sono previsti dati interi e che la lunghezza di un dato inviato non vada oltre quella massima prevista.
La convalida viene spesso eseguita in due modi: inserendo nella lista nera caratteri pericolosi o indesiderati (sebbene gli hacker possano spesso aggirare le liste nere) e inserendo nella lista solo i caratteri consentiti in una determinata circostanza, il che può comportare più lavoro da parte del programmatore. Sebbene la convalida possa avvenire sul lato client, gli hacker possono modificare o aggirare questo problema, quindi è essenziale convalidare tutti i dati sul lato server.
Ecco dieci modi per prevenire o limitare gli attacchi SQL injection:
Non fidarsi di nessuno, supponendo sempre che tutti i dati inviati dagli utenti siano malevoli, convalidando e disinfettando tutto.
Non utilizzare SQL dinamico quando può essere evitato, utilizzando istruzioni preparate e query parametrizzate, laddove possibile.
Aggiornamento e patch: vengono scoperte regolarmente vulnerabilità in applicazioni e database che gli hacker possono sfruttare utilizzando SQL injection, quindi è fondamentale applicare patch e aggiornamenti non appena possibile.
Firewall: prendere in considerazione un firewall per applicazioni Web (WAF) basato su software o dispositivo, per filtrare i dati dannosi. Un WAF può essere particolarmente utile per fornire una certa protezione di sicurezza contro una particolare vulnerabilità prima che una patch sia disponibile.
Ridurre la superficie di un attacco: eliminare qualsiasi inutile funzionalità del database per impedire ad un hacker di sfruttarla.
Utilizzare i privilegi appropriati: non connettersi mai al database usando un account con privilegi a livello di amministratore a meno che non vi sia un motivo valido per farlo. L’uso di un account ad accesso limitato è molto più sicuro e può limitare ciò che un hacker è in grado di fare.
Mantenere “più segreti” i segreti, supponendo che l’applicazione non sia sicura e agisca di conseguenza con la crittografia, come le password di hashing e altri dati riservati, comprese le stringhe di connessione.
Acquistare il software migliore: fare in modo che i programmatori del codice siano responsabili della verifica dello stesso e della correzione dei difetti di sicurezza nelle applicazioni personalizzate prima che il software venga consegnato.