SQL Injection Sandbox

Una finta schermata di login dove vedi comporsi la query in tempo reale e scopri come admin' OR '1'='1 aggira il controllo. Ambiente totalmente simulato e locale: serve a capire la falla e — soprattutto — a chiuderla.

Server
Query che il «server» costruisce ed esegue
Sfide guidate

Prova a entrare senza la password

Le sfide funzionano sul server vulnerabile. Cliccane una: riempie i campi e lancia l'attacco.

Suggerimento: il trucco è «chiudere» l'apice della stringa e iniettare logica SQL tua.

La difesa (la parte che conta)

Come si blocca: query parametrizzate

Il problema non è «filtrare gli apici»: è non mescolare mai codice e dati. Con i prepared statement i valori dell'utente restano dati e non possono diventare comandi.

✗ Vulnerabile — concatenazione

sql = "SELECT * FROM utenti " +
      "WHERE username = '" + user + "'" +
      " AND password = '" + pass + "'";
db.exec(sql);  // l'input diventa codice

✓ Sicuro — parametri

sql = "SELECT * FROM utenti " +
      "WHERE username = ? AND password = ?";
stmt = db.prepare(sql);
stmt.bind([user, pass]); // input = solo dati

In sintesi: con i parametri, admin' OR '1'='1 viene cercato come nome utente letterale — e non esiste nessun utente che si chiama così. Passa al «Server sicuro» qui sopra e riprova una sfida: non funzionerà più. Regola d'oro: parametrizza sempre, e non costruire mai query incollando input.