Esiste un modo per impedire che il nostro database Oracle subisca un attacco di tipo injection SQL?
La risposta è semplice, ma l'implementazione richiederà un certo lavoro di squadra tra gli application designer e gli amministratori del database.
L'applicazione di front-end non deve ammettere eccezioni nell'attività di fitlro degli input. I caratteri speciali devono essere rifiutati, a meno che non vi sia una particolare ragione per cui alcuni devono essere assolutamente utilizzati. Tenere presente che caratteri come “-”, “/” e “;” sono comunemente usati per modificare le istruzioni SQL nelle applicazioni.
Devono poi essere identificati tutti i numeri all'interno dei testi in input per evitare il passaggio di valori esadecimali e di hash MD5.
Infine, dovrebbe essere eseguita un'ulteriore operazione di filtro dei testi per individuare alcuni set di operatori SQL come UNION o INTERSECT.
Sul versante database, è possibile ridurre i rischi di un attacco injection SQL attraverso l'uso delle bind variable. Anziché concatenare l'input dell'utente ad altre stringhe di input, se si passano i valori all'interno di una bind variable i codici maligni SQL non verranno eseguiti. Oltre a essere resistenti all'injection SQL, nella maggior parte dei casi le bind variable sono fondamentali per le prestazioni e la scalabilità.
Infine, limitate le funzioni, le procedure e i package delle applicazioni che l'utente ha il permesso e i privilegi di eseguire. Il principio del privilegio minimo è un concetto chiave nell'implementazione. Impedire l'accesso ai package non necessari ai processi che deve eseguire l'utente sulla vostra applicazione (UTL_FILE, UTL_SMPT, UTL_TCP, e così via) può ridurre ulteriormente il rischio e/o la gravità di un eventuale attacco.
*Senior Production Oracle Database Administrator
