SQL Injection: Cos'è, Come Funziona e Come Prevenirla (2026)
1 luglio 2026 · di Pentevo
La SQL injection è una delle vulnerabilità di sicurezza più antiche, più conosciute e — sorprendentemente — ancora tra le più diffuse del web. È classificata nella OWASP Top 10 e ha causato alcune delle violazioni dati più clamorose degli ultimi decenni.
Cos'è la SQL injection?
La SQL injection (SQLi) è una tecnica di attacco che sfrutta l'inserimento di codice SQL malevolo in un campo di input di un'applicazione web. Quando l'applicazione costruisce una query SQL concatenando i dati dell'utente senza opportuna sanitizzazione, l'attaccante può manipolare la logica della query stessa.
Il risultato: l'attaccante può:
- Bypassare l'autenticazione (accedere senza credenziali valide)
- Estrarre dati riservati (username, password, dati bancari, email)
- Modificare o cancellare dati nel database
- In alcuni casi, eseguire comandi sul sistema operativo del server
Come funziona: un esempio pratico
Considera un semplice form di login con questi due campi: username e password.
Il codice vulnerabile potrebbe costruire la query così:
query = "SELECT * FROM users WHERE username='" + username + "' AND password='" + password + "'"
Se l'utente inserisce:
- Username:
admin' -- - Password: qualsiasi cosa
La query diventa:
SELECT * FROM users WHERE username='admin' --' AND password='qualunque cosa'
Il doppio trattino (--) in SQL è un commento: tutto ciò che segue viene ignorato. La query ora cerca solo l'utente admin senza verificare la password. L'attaccante accede come amministratore senza conoscere la password.
I tipi di SQL injection
In-band SQLi (la più comune)
Error-based SQLi: L'attaccante usa i messaggi di errore del database per estrarre informazioni sulla struttura del database. Un messaggio come "You have an error in your SQL syntax near '...'" rivela che l'applicazione è vulnerabile e spesso include informazioni utili.
Union-based SQLi: Usa l'operatore UNION per aggiungere righe extra alla query originale, estratte da altre tabelle. Permette di estrarre dati da qualsiasi tabella del database:
' UNION SELECT username, password FROM users --
Blind SQLi (senza output diretto)
Boolean-based Blind SQLi: L'applicazione non mostra i dati del database direttamente, ma l'attaccante deduce informazioni dalla risposta (vera o falsa):
' AND 1=1 -- (risposta normale)
' AND 1=2 -- (risposta diversa)
Time-based Blind SQLi: L'attaccante usa funzioni di delay (SLEEP(), WAITFOR DELAY) per dedurre informazioni dal tempo di risposta:
'; IF (SELECT COUNT(*) FROM users WHERE username='admin') > 0 WAITFOR DELAY '0:0:5' --
Se la risposta impiega 5 secondi, esiste un utente 'admin'.
Out-of-band SQLi
L'attaccante estrae dati attraverso canali alternativi (DNS lookup, HTTP request verso server esterno). Meno comune ma utile quando i canali normali sono bloccati.
Strumenti usati nei penetration test
Il tool più famoso per testare la SQL injection è SQLMap — uno strumento open source che automatizza il rilevamento e lo sfruttamento delle vulnerabilità SQLi:
sqlmap -u "https://esempio.com/articolo?id=1" --dbs
Importante: Usare SQLMap su sistemi senza autorizzazione esplicita è illegale. È uno strumento per professionisti della sicurezza durante test autorizzati.
Come prevenire la SQL injection
1. Query parametrizzate (prepared statements) — LA soluzione principale
Invece di concatenare stringhe per costruire le query, usa query parametrizzate dove i dati dell'utente vengono passati come parametri separati, mai come parte del testo SQL:
Vulnerabile (PHP):
$query = "SELECT * FROM users WHERE username='$username'";
Sicuro (PHP con PDO):
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
I parametri vengono trattati come dati puri, mai come codice SQL. Questo è il modo corretto di prevenire la SQL injection, indipendentemente dal linguaggio o dal database.
2. ORM (Object-Relational Mapping)
Framework come Hibernate (Java), Eloquent (Laravel/PHP), ActiveRecord (Ruby on Rails) o SQLAlchemy (Python) usano internamente prepared statements e proteggono dalla SQL injection, a patto di non usare le funzioni di query raw incorrettamente.
3. Stored procedure
Procedure memorizzate nel database che accettano solo parametri predefiniti. Sicure se implementate correttamente (non costruendo SQL dinamicamente al loro interno).
4. Validazione e sanitizzazione degli input
- Valida il tipo di dato atteso (numero? solo numeri)
- Usa whitelist (permetti solo caratteri attesi) invece di blacklist
- Non fidarti mai dei dati provenienti dal client
5. Principio del minimo privilegio per il database
L'utente del database usato dall'applicazione web dovrebbe avere solo i permessi strettamente necessari:
- Lettura solo dove necessario (SELECT)
- Nessun accesso a tabelle di sistema
- Nessun permesso di DROP TABLE o GRANT
6. WAF (Web Application Firewall)
Un WAF rileva e blocca molti pattern di SQL injection noti. Non è una soluzione sufficiente da sola (può essere aggirato), ma aggiunge un layer di difesa utile.
7. Test di sicurezza regolari
- Scanner DAST (Dynamic Application Security Testing) come OWASP ZAP
- Code review con focus sui layer di accesso al database
- Penetration test periodici
Impatto reale: violazioni famose causate da SQL injection
- Heartland Payment Systems (2008): 130 milioni di carte di credito rubate. SQLi su applicazione web di pagamento.
- Sony Pictures (2011): 1 milione di account utenti esposti. Il gruppo LulzSec ha usato una semplice SQL injection.
- Yahoo (2012): 450.000 credenziali estratte tramite SQLi.
- TalkTalk (2015): 157.000 clienti britannici colpiti. Un teenager ha usato SQLi elementare.
Conclusione
La SQL injection è semplice da capire, spesso facile da sfruttare, e quasi sempre prevenibile con le pratiche corrette di sviluppo. L'unica vera soluzione è usare query parametrizzate in modo sistematico — tutto il resto è defense in depth. Vuoi imparare il penetration testing delle applicazioni web? Esplora i corsi gratuiti di Pentevo Academy.
Domande frequenti
Cos'è la SQL injection?
La SQL injection è una vulnerabilità di sicurezza che permette a un attaccante di inserire codice SQL malevolo in un'applicazione web, manipolando le query al database. Può permettere di bypassare l'autenticazione, estrarre dati riservati, modificare o cancellare dati, e in alcuni casi eseguire comandi sul server.
Come si previene la SQL injection?
La prevenzione principale è l'uso di query parametrizzate (prepared statements) invece della concatenazione di stringhe per costruire le query SQL. Altre misure includono ORM affidabili, validazione degli input, principio del minimo privilegio per l'utente del database, WAF e test di sicurezza regolari.
La SQL injection è ancora diffusa nel 2026?
Sì. Nonostante sia conosciuta da oltre 25 anni, la SQL injection rimane una delle vulnerabilità più diffuse, classificata nella OWASP Top 10 come parte della categoria 'Injection'. Molte applicazioni, soprattutto legacy, sono ancora vulnerabili.
Come posso verificare se la mia applicazione è vulnerabile a SQL injection?
I metodi includono: test manuale inserendo caratteri speciali come apice singolo (') nei campi input e osservando gli errori, l'uso di scanner automatici come SQLMap, e il coinvolgimento di professionisti per un penetration test. Il modo più affidabile è il code review dei layer di accesso al database.
Letture correlate
Intelligenza Artificiale nella Cybersecurity: Come l'AI Cambia Attacchi e Difese
Come l'intelligenza artificiale sta rivoluzionando la cybersecurity nel 2026: AI negli attacchi, AI nella difesa, deep fake, prompt injection e cosa aspettarsi.
FundamentalsSicurezza Informatica per Principianti: Guida Completa 2026
Guida alla sicurezza informatica per chi inizia da zero: concetti fondamentali, minacce principali, strumenti di difesa e come iniziare a studiare cybersecurity in italiano.
FundamentalsNotizie Cybersecurity 2026: Il Panorama delle Minacce in Italia e in Europa
Aggiornamenti sul panorama della cybersecurity in Italia e in Europa nel 2026: NIS2, ACN, attacchi ransomware, trend delle minacce e normative emergenti.
FundamentalsGuida Completa all'Ethical Hacking (2026): Tutto Quello che Devi Sapere
Guida completa all'ethical hacking in italiano: definizione, metodologia in 5 fasi, strumenti principali, certificazioni e come iniziare una carriera nel settore.
Metti in pratica questi concetti
Pentevo Academy trasforma questi concetti in lezioni guidate, video e quiz — gratis.
Inizia a imparare gratis