SQL injection: come e perché funziona
Comprenda la SQLi classica, blind e out-of-band e perché le query parametrizzate la prevengono.
SQL injection: come e perché funziona è una lezione Cyber Security Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cyber Security Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cyber Security Academy include 4 lezioni in totale.
Che cos'è la SQL injection?
SQL Injection (SQLi) si verifica quando l'input fornito dall'utente viene incluso in una query SQL senza un'adeguata sanitizzazione, consentendo agli aggressori di manipolare la logica della query. È una delle vulnerabilità web più datate e dannose.
Come funziona la SQL injection
Un modulo di accesso esegue la query: SELECT * FROM users WHERE username='INPUT' AND password='INPUT'
Se l'aggressore inserisce ' OR 1=1-- come nome utente, la query diventa: SELECT * FROM users WHERE username='' OR 1=1--' AND password='...' — e restituisce tutti gli utenti.
Tipi di SQL injection
Varianti della SQLi:
- In-band: i risultati vengono restituiti direttamente nella risposta (classica, basata sugli errori)
- Blind Boolean: nessun output diretto; i dati vengono dedotti dalle risposte vero/falso
- Blind Time-based: i dati vengono dedotti dai ritardi nella risposta (
SLEEP(5)) - Out-of-band: i dati vengono esfiltrati tramite richieste DNS/HTTP
Injection basata su UNION
Gli attacchi UNION aggiungono i risultati di query controllate dall'aggressore:
-- Discover number of columns:
id=1 ORDER BY 3--
-- Extract data:
id=1 UNION SELECT username,password,NULL FROM users--Injection basata sugli errori
I messaggi di errore rivelano la struttura del database. L'aggressore inserisce dati che causano un errore di sintassi e il messaggio di errore risultante divulga nomi di tabelle, nomi di colonne o la versione del database. Disabiliti i messaggi di errore dettagliati in produzione.
SQL injection blind
Quando non è disponibile alcun output visibile, gli aggressori utilizzano condizioni booleane:
-- If admin exists, page loads normally:
id=1 AND (SELECT COUNT(*) FROM users WHERE username='admin')=1--
-- Time-based:
id=1; IF(1=1) WAITFOR DELAY '0:0:5'--sqlmap: SQL injection automatizzata
sqlmap automatizza il rilevamento e lo sfruttamento delle SQL injection. Può scaricare i database, leggere file ed eseguire persino comandi del sistema operativo se l'utente del database dispone di privilegi sufficienti.
sqlmap -u "http://target.com/page?id=1" --dbs
sqlmap -u "http://target.com/page?id=1" -D webapp -T users --dumpPrevenire la SQL injection: query parametrizzate
La difesa principale consiste nelle query parametrizzate (prepared statement). L'input dell'utente viene passato come parametro e non viene mai concatenato alla stringa della query:
# Python (safe):
cursor.execute("SELECT * FROM users WHERE username = %s", (username,))
# Node.js (safe):
pool.query("SELECT * FROM users WHERE id = $1", [userId])Protezione degli ORM
L'utilizzo di un ORM (SQLAlchemy, Hibernate, Sequelize) previene generalmente la SQL injection, perché le query vengono costruite utilizzando astrazioni sicure. Tuttavia, i metodi per le query raw (execute(), query()) con interpolazione di stringhe aggirano le protezioni dell'ORM.
Convalida dell'input e WAF
Difese aggiuntive:
- Convalidare l'input e ammettere solo tipi autorizzati (interi, indirizzi email)
- Web Application Firewall (WAF) per rilevare i pattern di injection
- Account del database con privilegi minimi (nessun DROP e nessun UNION nelle query di sola lettura)
- Stored procedure (riducono l'esposizione, ma non costituiscono una soluzione completa)
Impatto della SQL injection
Una SQL injection riuscita può causare: dump completo del database, bypass dell'autenticazione, modifica o eliminazione dei dati, lettura dei file del server (LOAD_FILE), scrittura di web shell ed esecuzione di comandi del sistema operativo tramite xp_cmdshell (MSSQL).
Verifica rapida: SQL injection
Qual è la difesa principale contro la SQL injection?
Riepilogo della lezione
La SQL injection manipola le query del database tramite input dell'utente non sanificato. I tipi di attacco includono quello classico, quello booleano blind, quello basato sul tempo e quello basato su UNION. La difesa principale consiste nell'utilizzare query parametrizzate: non concateni mai l'input dell'utente nelle istruzioni SQL. Utilizzi gli ORM con cautela, applichi il principio del privilegio minimo agli account del database e disabiliti i messaggi di errore dettagliati.
Domande Frequenti
La lezione «SQL injection: come e perché funziona» è gratuita?
Sì — il testo completo di «SQL injection: come e perché funziona» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cyber Security Academy, passa a CoddyKit PRO. Il corso Cyber Security Academy include 4 lezioni in totale.
Cosa imparerò in «SQL injection: come e perché funziona»?
Comprenda la SQLi classica, blind e out-of-band e perché le query parametrizzate la prevengono. Eserciti Cyber Security Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Cyber Security Academy?
Non è richiesta alcuna esperienza precedente. Cyber Security Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «SQL injection: come e perché funziona»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Cyber Security Academy?
Sì. Ogni lezione Cyber Security Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- SQL injection: come e perché funziona
- Cross-Site Scripting (XSS)
- Cross-Site Request Forgery (CSRF)
- Configurazioni errate ed esposizione dei servizi