L'SQL Injection (SQLi) rimane storicamente una delle vulnerabilità più diffuse e devastanti nelle applicazioni web. Essa si verifica quando i dati forniti dall'utente vengono concatenati direttamente nelle query SQL inviate al database engine, permettendo all'attaccante di alterare la semantica della query originaria.

Come Funziona il Meccanismo di Iniezione?

Quando un'applicazione web riceve parametri da un modulo di login o da parametri URL (ad esempio $_POST['username']), l'interprete SQL non è in grado di distinguere dove finisce l'istruzione del programmatore e dove comincia l'input dell'utente.

-- Query vulnerabile costruita tramite concatenazione diretta:
SELECT * FROM users WHERE username = '$username' AND password = '$password'

Se un utente malintenzionato invia come parametro ' OR '1'='1' -- , il comando SQL eseguito diventa:

SELECT * FROM users WHERE username = '' OR '1'='1' -- ' AND password = '...'

La condizione logica '1'='1' è una tautologia (sempre vera) e i due trattini commentano il resto della query, bypassando completamente il controllo della password.

Le Tre Tecniche di Difesa Assoluta

  • Prepared Statements (Parametrizzazione): Utilizzare PDO o MySQLi con parametri vincolati (placeholder ? o nominati :user). Il database compila prima la query e tratta il valore strettamente come dato, mai come codice eseguibile.
  • Principio del Minimo Privilegio (PoLP): L'utente del database impiegato dall'applicazione web non deve possedere permessi amministrativi di DROP TABLE o accesso al filesystem (FILE privilege).
  • Validazione e Whitelisting: Controllare che numeri siano effettivamente interi e che campi come email o codici rispettino formati rigorosi prima ancora di inviarli al database.
HT

HackTheory Lab

Laboratorio indipendente di sperimentazione tecnica. Spieghiamo architetture web, sicurezza offensiva e difensiva, con un occhio di riguardo al mondo open source e maker.