Una delle più grandi classi di vulnerabilità web è conosciuta come "SQL Injection" o SQLi. Il linguaggio di query strutturato, noto anche come SQL, è il lingua utilizzata per interagire con la maggior parte dei database, sebbene vengano utilizzate numerose varianti della lingua a seconda del database piattaforma. Qualsiasi sito Web che memorizza i dati dell'utente, come le informazioni sull'account, o fornisce funzionalità di caricamento dell'utente, come un sito Web di hosting di immagini, utilizzerà un database per archiviare tali dati.
Suggerimento: SQL è generalmente pronunciato "ess cue ell" o "sequel" con la prima opzione più comune nell'inglese britannico e la seconda più diffusa nell'inglese americano. Entrambe le pronunce sono generalmente comprese nel contesto del discorso sui database.
Cos'è SQLi?
SQLi è una vulnerabilità in cui gli sviluppatori web che progettano il codice che comunica tra i il server web e il database non implementano protezioni contro i comandi SQL inviati da a utente. Il problema è che è possibile essere in grado di sfuggire alle istruzioni del database e aggiungere nuovi argomenti o un'istruzione completamente nuova. La modifica o la seconda istruzione del database può eseguire una serie di azioni tra cui eliminazioni o perdite di dati potenzialmente su larga scala.
Gli exploit in genere ruotano attorno al rendere vere le affermazioni esistenti in tutte le circostanze o fornire un secondo comando in batch che esegue un'azione specifica come l'eliminazione o la visualizzazione di tutti i dati. Ad esempio, un'istruzione SQL per accedere a un sito Web può verificare se il nome utente e la password inviati corrispondono a una voce nel database. Per tentare di ottenere l'accesso, un exploit di SQL injection può provare ad aggiungere una clausola "or true" come "or 1=1". Ciò renderebbe il comando sulla falsariga di "accedi con [questo] nome utente, se la password è [questo] o questa affermazione è vera".
Come prevenire SQLi
SQLi era un modo molto comune per i siti Web di violare il proprio database e quindi trapelare online. Grazie a uno sforzo concertato per garantire che la consapevolezza della sicurezza faccia parte della formazione degli sviluppatori, questa classe di vulnerabilità è stata in gran parte risolta e si riscontra solo raramente.
Il metodo corretto per prevenire SQLi consiste nell'utilizzare istruzioni preparate, note anche come query con parametri. Tradizionalmente, le istruzioni SQL vengono dichiarate e l'input dell'utente viene concatenato in esse durante tale dichiarazione. Con le istruzioni preparate, il comando del database viene scritto e quindi una funzione sperate esegue il comando e inserisce i dati dell'utente. Anche se questa può sembrare una piccola differenza, cambia completamente il modo in cui viene gestito il comando. La differenza impedisce l'esecuzione di comandi SQL significativi e tratta tutto l'input dell'utente come una stringa, impedendo l'esecuzione di SQL injection.