Vai al contenuto

SQL Injection: cos’è e come fare a difendersi

SQL Injection: cos’è e come fare a difendersi

SQL Injection: cos’è e come fare a difendersi

La SQL Injection è una delle tecniche di attacco più longeve del web, eppure continua a comparire stabilmente nelle classifiche delle vulnerabilità più diffuse e più sfruttate. Il motivo è semplice: quasi ogni sito dinamico, dal piccolo blog all’e-commerce con migliaia di prodotti, si appoggia a un database relazionale per conservare contenuti, credenziali e dati dei clienti. Ogni volta che un’applicazione costruisce una query a partire da un dato inserito da un visitatore, si apre una porta potenziale.

Il rischio riguarda tanto i grandi portali quanto i siti di dimensioni contenute, spesso proprio perché su questi ultimi la manutenzione è meno frequente.

Che cos’è una SQL Injection

La SQL Injection, spesso abbreviata in SQLi, è una tecnica che consiste nell’inserire codice SQL malevolo all’interno dei campi di input di un’applicazione web, con l’obiettivo di alterare le query che vengono eseguite sul database di backend. L’attaccante sfrutta il fatto che l’applicazione tratta l’input dell’utente come parte integrante dell’istruzione da eseguire, invece di considerarlo un semplice valore.

Il risultato è la possibilità di accedere a informazioni che non dovrebbero essere visibili: elenchi di utenti, dati anagrafici dei clienti, password, informazioni commerciali riservate. Nei casi più gravi l’attaccante riesce a modificare o cancellare intere tabelle, oppure a ottenere privilegi amministrativi sul database.

Tecnicamente la vulnerabilità può colpire qualsiasi sistema che dialoghi con un database SQL, inclusi software gestionali e dispositivi di rete. I siti web restano comunque il bersaglio più frequente, perché espongono al pubblico un numero elevato di punti di ingresso: form di ricerca, moduli di login, filtri di catalogo, parametri passati tramite URL.

Come funzionano le query SQL

Per capire la meccanica dell’attacco è utile richiamare il funzionamento di una query. SQL è il linguaggio standard con cui si interrogano e si manipolano i database relazionali: attraverso istruzioni come SELECT, INSERT, UPDATE e DELETE l’applicazione recupera, aggiorna o rimuove i record richiesti.

Una query tipica di un negozio online potrebbe presentarsi in questa forma:

SELECT NomeArticolo, DescrizioneArticolo 

FROM Articoli 

WHERE IDArticolo = 999

Quando un visitatore apre l’indirizzo https://esempio.it/articoli.asp?idarticolo=999, il valore viene inserito nella query e il database restituisce nome e descrizione del prodotto. Il meccanismo funziona correttamente finché l’input contiene ciò che ci si aspetta.

Il problema nasce quando il parametro contiene istruzioni SQL. Modificando l’URL in https://esempio.it/articoli.asp?idarticolo=999 OR 1=1, la query diventa:

SELECT NomeArticolo, DescrizioneArticolo 

FROM Articoli 

WHERE IDArticolo = 999 OR 1=1

Poiché la condizione 1=1 è sempre vera, il database restituisce l’intero contenuto della tabella, inclusi record che l’utente non avrebbe alcun diritto di consultare.

Le varianti sono numerose. Un punto e virgola permette di concatenare una seconda istruzione, con conseguenze molto più serie: un parametro come 999; DROP TABLE Utenti produce una query che elimina l’intera tabella degli utenti. L’operatore UNION consente invece di fondere due SELECT distinte, estraendo dati da tabelle diverse da quella interrogata originariamente; un input costruito come 999 UNION SELECT username, password FROM Utenti restituisce insieme ai dati del prodotto anche le credenziali di ogni account registrato.

Perché le SQL Injection sono così pericolose per un sito web

L’impatto di un attacco riuscito si estende ben oltre il perimetro tecnico. Le conseguenze più frequenti riguardano:

Va aggiunto un elemento spesso sottovalutato: la SQL Injection funziona anche come porta di ingresso verso sistemi più profondi. L’attacco subito da Accellion nel 2021, che colpì a cascata banche centrali, enti pubblici e grandi aziende di telecomunicazioni, iniziò proprio con una SQL Injection utilizzata per recuperare le chiavi di cifratura dal database, per poi proseguire con l’esecuzione di comandi a livello di sistema operativo e l’installazione di una web shell dedicata all’esfiltrazione dei dati.

I tipi di SQL Injection

Le tecniche di iniezione vengono classificate in base al canale usato per ricevere i risultati e al livello di visibilità che l’attaccante ottiene.

Come difendersi dalle SQL Injection

La protezione efficace nasce dalla combinazione di più livelli di difesa, applicati sia al codice sia all’infrastruttura.

SQL Injection: cos’è e come fare a difendersi

Il ruolo dell’hosting nella sicurezza del tuo sito

Il codice dell’applicazione rappresenta soltanto una parte dell’equazione. L’ambiente su cui il sito viene eseguito determina la rapidità con cui un attacco viene intercettato e la facilità con cui si torna operativi dopo un incidente.

Un hosting orientato alla sicurezza mette a disposizione versioni aggiornate di PHP e dei database server più diffusi, isolamento tra gli account presenti sulla stessa macchina, firewall perimetrale, monitoraggio del traffico anomalo e certificati SSL configurati correttamente. Altrettanto rilevante è la politica di backup: disporre di copie automatiche, frequenti e conservate su sistemi separati consente di ripristinare un database manomesso in tempi ridotti, contenendo il danno economico e reputazionale.

Vhosting affianca alle proprie soluzioni di hosting un’infrastruttura progettata su questi principi, con aggiornamenti gestiti, backup automatizzati e supporto tecnico specializzato. La combinazione tra sviluppo attento e infrastruttura affidabile resta la strategia più efficace per mantenere il proprio progetto online al riparo dalle SQL Injection e dalle minacce che ne derivano.