Potete mettere in atto diverse misure per evitare attacchi di SQL injection sul vostro database. Per fare ciò dovrete occuparvi di tutti i componenti coinvolti, cioè del server, delle singole applicazioni e del Database Management System (sistema di gestione di basi di dati).
Primo passaggio: controllare gli input automatici delle applicazioni
Verificate e filtrate i metodi e i parametri che utilizzano le applicazioni collegate nell’inserire gli input nel database. I dati dovrebbero sempre essere presenti nei classici tipi di file per un database. Se viene richiesto un parametro numerico, potete ad esempio verificarlo con uno script PHP comprensivo della funzione is_numeric(). Nel caso del filtraggio significa che verranno ignorati i relativi caratteri speciali. Un altro punto importante è quello di fare in modo che le applicazioni non mostrino messaggi di errore esterni, che svelino informazioni sul sistema utilizzato o sulle strutture del database.
Nel frattempo sono ormai diventati comuni i cosiddetti prepared statements, che si possono utilizzare con molti DBMS. Queste istruzioni predefinite servivano originariamente per eseguire interrogazioni fatte frequentemente e, per via della loro struttura, riducono anche il rischio di una SQL injection. Infatti le istruzioni parametrizzate comunicano al database il comando SQL vero e proprio separato dai parametri. Solo lo stesso DBMS riunisce infine entrambi e filtra così automaticamente i caratteri speciali decisivi.
Secondo passaggio: occuparsi di una protezione del server completa
La sicurezza del server, sul quale eseguite il vostro DBMS, ricopre ovviamente un ruolo importante nella prevenzione contro le SQL injections. Prima di tutto va rafforzato il sistema operativo in base allo schema conosciuto:
- Installate o attivate solo applicazioni e servizi che sono importanti per il funzionamento del database.
- Eliminate tutti gli account utente che non vi servono.
- Assicuratevi che tutti gli aggiornamenti importanti del sistema e dei programmi siano installati.
Maggiori sono i requisiti, che sono collegati alla sicurezza del vostro sito, più dovreste prendere in considerazione l’uso di Intrusion Detection Systems (IDS) o di Intrusion Prevention Systems (IPS), che lavorano con diversi sistemi di riconoscimento per individuare tempestivamente gli attacchi sul server, emettere i relativi avvisi e anche attivare automaticamente, nel caso degli IPS, le giuste contromisure. Può rivelarsi una misura preventiva utile anche un application-level gateway, un componente dei firewall che controlla il traffico dati tra le applicazioni e il browser direttamente sul livello di applicazione.
Terzo passaggio: rafforzare il database e utilizzare codici sicuri
Come il vostro sistema operativo, il database dovrebbe essere ripulito di tutti quei fattori irrilevanti e aggiornato regolarmente. A questo scopo, eliminate tutte le procedure memorizzate che non vi servono e disattivate tutti i servizi inutili e gli account utente. Impostate un account database speciale, da utilizzare solo per l’accesso dal web e dotato del minimo dei permessi. Inoltre si consiglia di salvare tutti i dati sensibili nel vostro database, come ad esempio le password, in forma crittografata.
Per quanto riguarda i prepared statements, è caldamente consigliato di non utilizzare il modulo PHP mysql e di scegliere invece mysqli o PDO (PHP Data Objects). In questo modo potete proteggervi ulteriormente anche con un codice sicuro. Così ad esempio la funzione mysqli_real_escape_string() negli script PHP impedisce che i caratteri speciali vengano trasmessi al database SQL nella forma originaria e li filtra. Se ad esempio ampliate le seguenti righe di codice