Come evitare le Sql Injection
June 6, 2008 - NoisesPrevenire le Sql Injection
Quando un utente malizioso interagisce con il nostro software, si mette alla ricerca dei punti deboli e tenta di rompere il sistema proprio lì; perciò, possiamo affermare che un sistema è tanto sicuro quanto è sicura la sua parte più debole.
Andiamo dunque ad esaminare tutte le componenti da mettere in sicurezza; le operazioni consigliate possono sembrare molto semplici ma, forse per disattenzione, forse per la fretta di rilasciare un prodotto, non sempre vengono effettuate (ed il recente boom di infezioni lo dimostra).

Conosci i tuoi dati
Se un’applicazione web richiede all’utente di scegliere ad es. una data, è bene validare tipo, lunghezza, formato e range client-side (in JavaScript) e server-side.
Prima del viaggio verso il lato server, è bene filtrare i dati per aggiungere caratteri di escape a caratteri che hanno un significato speciale in SQL, ad es. l’apostrofo. Tenere presente che questi filtri non hanno effetto sugli attacchi che impiegano caratteri ASCII in esadecimale; in tal caso, la difesa dovrà avvenire più in profondità.
Se poi il dato che viaggia è sensibile (ad es. informazioni sugli utenti, specialmente se finanziarie) criptarlo è d’obbligo, ad es. tramite un salted hash, ad es. MD5.
Conosci i tuoi utenti
Assegnare agli utenti del database i privilegi strettamente necessari: un’applicazione web che si connette ad un db usando l’account dell’amministratore da’ all’attaccante il potenziale di eseguire qualunque comando.
Inoltre, se l’attaccante riesce ad agire fuori dei confini del db (ad es. usando la procedura xp_cmdshell), potrebbe acquisire accesso illimitato alla macchina che ospita SQL Server. Infatti, quando un’istanza di SQL Server viene installata, viene creato un servizio in esecuzione in background (che processa i comandi dalle applicazioni ad esso connesse) appartenente all’account di sistema locale (il più potente su una macchina Windows, persino più potente dell’account amministrativo). Perciò, Microsoft raccomanda che durante l’installazione di SQL Server il server venga eseguito da un account che possa accedere soltanto alle risorse strettamente necessarie.
Approfondimenti:
Sql Injection
in 


