SQL Injection: Cos'è e Come Prevenire uno degli Attacchi più Comuni

Hacking

L'SQL Injection (SQLi) è una tecnica di attacco che sfrutta una vulnerabilità nel codice di un'applicazione web per "iniettare" ed eseguire comandi SQL malevoli sul database. Se un'applicazione non valida e "pulisce" correttamente gli input degli utenti, un hacker può manipolare le query per rubare, modificare o cancellare dati.

Esempio di Attacco SQL Injection

Immagina un form di login con una query PHP vulnerabile come questa:

$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";

Un utente normale inserisce il suo nome utente e la sua password. Ma un hacker potrebbe inserire nel campo username la stringa: ' OR '1'='1. La query risultante diventerebbe:

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

La condizione `'1'='1'` è sempre vera, e questo permette all'hacker di bypassare l'autenticazione e accedere come primo utente del database (spesso l'amministratore).

Come Difendersi: Prepared Statements

La difesa più efficace contro l'SQL Injection è l'uso di Prepared Statements (o query parametrizzate). Con questo approccio, la query SQL e i dati forniti dall'utente vengono inviati al database separatamente.

  1. Prima si invia al database il "template" della query con dei segnaposto (placeholder) al posto dei dati.
  2. Poi si inviano i dati dell'utente.

Il database tratta i dati dell'utente sempre e solo come dati, mai come parte del comando SQL da eseguire. In questo modo, qualsiasi codice SQL malevolo inserito dall'utente non verrà mai eseguito, ma solo trattato come una semplice stringa di testo.

Altre difese includono la validazione degli input (input validation) e l'applicazione del principio del privilegio minimo per l'utente del database.

Hai bisogno di una soluzione su misura?

Dalla Web App al gestionale custom, trasformiamo le tue idee in software performante. Contattaci per una consulenza gratuita.

Richiedi una consulenza