0Pricing
Cyber Security Academy · Lezione

Difesa dagli attacchi SQL injection

Prevenga gli attacchi di injection

Difesa dagli attacchi SQL injection è 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

La SQL injection (SQLi) si verifica quando un input utente non attendibile viene concatenato direttamente a una query SQL. L'aggressore inserisce la sintassi SQL in un campo che l'applicazione considera semplici dati, modificando il significato della query.

Rimane una delle vulnerabilità web più dannose, perché può esporre interi database, aggirare i login o distruggere dati.

Una query vulnerabile

L'errore classico consiste nella concatenazione di stringhe. Se l'input è tom, la query è corretta, ma un input creato ad arte ne riscrive la logica.

  • L'apice singolo chiude prematuramente la stringa.
  • Tutto ciò che segue diventa SQL eseguibile.
query = "SELECT * FROM users WHERE name = '" + userInput + "'";
// userInput = tom' OR '1'='1
// becomes: SELECT * FROM users WHERE name = 'tom' OR '1'='1'

Aggirare l'autenticazione

I moduli di accesso sono un bersaglio privilegiato. Inserendo una condizione sempre vera e trasformando in commento il resto della query, un aggressore può accedere senza password.

La sequenza -- trasforma in commento la clausola rimanente, facendo ignorare il controllo della password.

-- attacker enters in the username field:
admin' --
-- resulting query:
SELECT * FROM users WHERE user = 'admin' --' AND pass = '...'

Query parametrizzate

La difesa principale consiste nelle query parametrizzate (istruzioni preparate). La struttura SQL viene inviata separatamente dai dati, quindi l'input viene sempre trattato come un valore, mai come codice.

Il driver del database associa in modo sicuro i segnaposto ? ai valori forniti.

-- Python (sqlite3 / psycopg)
cur.execute(
  'SELECT * FROM users WHERE name = ? AND pass = ?',
  (username, password)
)

Istruzioni preparate in Java

Ogni linguaggio principale offre il supporto alla parametrizzazione. In Java, utilizzi PreparedStatement invece di creare stringhe con Statement.

I parametri associati non possono uscire dal proprio spazio, quindi qui la SQL injection è strutturalmente impossibile.

PreparedStatement ps = conn.prepareStatement(
  "SELECT * FROM users WHERE name = ?");
ps.setString(1, userInput);
ResultSet rs = ps.executeQuery();

Stored procedure

Le stored procedure possono essere utili quando utilizzano internamente input parametrizzati. Tuttavia, presti attenzione: una stored procedure che crea SQL dinamico tramite concatenazione è altrettanto vulnerabile.

  • Sicuro: parametri passati alla proc.
  • Non sicuro: EXEC() di stringhe concatenate all'interno della proc.

Convalida degli input e allowlist

La convalida è un utile secondo livello di difesa. Utilizzi le allowlist (accettano solo schemi noti e validi) anziché le blocklist (cercano di vietare i caratteri pericolosi).

Ad esempio, un campo per un ID numerico dovrebbe rifiutare qualsiasi carattere che non sia una cifra prima che l'input raggiunga la query.

if not user_id.isdigit():
    raise ValueError('invalid id')
# only then use the value

L'escaping è l'ultima risorsa

L'escaping manuale degli apici è fragile e soggetto a errori. Database diversi applicano regole di escaping diverse e i casi limite, come i trucchi di codifica o la SQL injection di secondo livello, possono sfuggire ai controlli.

Preferisca le query parametrizzate. Utilizzi l'escaping solo quando un ORM o un driver non può parametrizzare un identificatore specifico.

Privilegio minimo per gli account del database

Limiti i danni di un'eventuale SQL injection riuscita applicando il principio del privilegio minimo all'utente del database usato dall'applicazione.

  • Conceda solo SELECT, INSERT e UPDATE sulle tabelle necessarie.
  • Non utilizzi mai un account superuser/root per l'app.
  • Neghi DROP, FILE e i diritti amministrativi.
GRANT SELECT, INSERT, UPDATE ON appdb.orders TO 'webapp'@'%';
REVOKE DROP, ALTER ON appdb.* FROM 'webapp'@'%';

ORM e query builder

I moderni ORM (Hibernate, Sequelize, Django ORM, SQLAlchemy) utilizzano la parametrizzazione per impostazione predefinita, eliminando la maggior parte dei rischi di SQL injection.

Il pericolo ricompare quando gli sviluppatori ricorrono al SQL nativo o usano l'interpolazione di stringhe in un query builder. Passi sempre i valori come parametri associati, anche in modalità raw.

Difesa in profondità

Nessun singolo controllo è sufficiente. Combini più livelli:

  • Query parametrizzate ovunque (difesa principale).
  • Convalida degli input e allowlist.
  • Account del database con privilegi minimi.
  • Un web application firewall (WAF) per intercettare gli schemi noti.
  • Gestione degli errori che non esponga mai SQL o stack trace.

Verifica rapida

Verifichi la sua comprensione della difesa principale.

Riepilogo

Ha imparato come funziona la SQL injection e come prevenirla:

  • La SQLi deriva dalla concatenazione di input non attendibili nelle query.
  • Le query parametrizzate sono la difesa principale.
  • Aggiunga la convalida tramite allowlist, account del database con privilegi minimi e un WAF.
  • Eviti l'escaping manuale e l'SQL dinamico all'interno delle stored procedure.

La difesa in profondità impedisce che un singolo errore si trasformi in una violazione.

Domande Frequenti

La lezione «Difesa dagli attacchi SQL injection» è gratuita?

Sì — il testo completo di «Difesa dagli attacchi SQL injection» è 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 «Difesa dagli attacchi SQL injection»?

Prevenga gli attacchi di injection 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 «Difesa dagli attacchi SQL injection»?

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

  1. Difesa dagli attacchi SQL injection
  2. Controllo degli accessi e crittografia
  3. Audit e monitoraggio
  4. Sicurezza di backup e ripristino
← Torna a Cyber Security Academy