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.
Accedi al registro
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.
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.