[image]https://leganerd.com/wp-content/uploads/LEGANERD_038849.jpg[/image]
[quote]Sua figlia si chiama ‘Aiuto sono intrappolato in una fabbrica di patenti di guida’.[/quote]
Il quote si riferisce alla sorella di Robertino che vedremo protagonista nella serie 1337, il cui primo nome potrebbe essere stato cambiato da qualcuno che doveva un messaggio di aiuto dalla fabbrica di patenti in cui era intrappolato (questa interpretazione deriva dal forum di XKCD). La madre è la signora Roberts, di cui non andro’ a spoilerare la professione.
Perchè il nome di Robertino Tabelle ha rotto il database della scuola? Si tratta di un caso eclatante di [url=http://it.wikipedia.org/wiki/SQL_injection]SQL Injection[/url], attacco ad una applicazione web che sfrutta delle falle di sicurezza tipicamente in form che si trovano in una pagina: in pratica, la scuola ha un database in cui registra i suoi dati, in particolare ha una tabella -la componente fondamentale del database- chiamata ‘Studenti’ in cui sono raccolti tutti i dati degli studenti; ogni studente costituisce una ‘tupla’ o ‘record’.
Cosa è successo?
L’addetto all’inserimento dati ha scritto i dati nel form, che il server ha assemblato nella query (i comandi che si danno per modificare il database):
[quote]
INSERT INTO Studenti(indirizzo, nome, contatto) VALUES (‘via dei matti,0’, ‘[b]Roberto’); DROP TABLE Studenti;- -[/b]’, ‘166/101010’);
[/quote]
Dove è tutto su una riga, la parte evidenziata è il nome di Robertino e ‘- -‘ indica un commento (quindi fa sparire la parte successiva agli occhi dell’interprete come abbiamo visto in [url=https://leganerd.com/2011/03/02/xkcd-commentato/]questo[/url] post).
Bene, sembrerebbe corretto, ma in realtà la query viene interpretata da MySQL (o simili) così
[quote]
INSERT INTO Studenti(indirizzo, nome, contatto) VALUES (‘via dei matti,0’, ‘Roberto’);
DROP TABLE Studenti;- –
[/quote]
Adesso si vede che in realtà sono due istruzioni, un inserimento e un comando ‘DROP TABLE’ che cancella tutta la tabella ‘Studenti’ dal database.
La soluzione sta nella “sanitizzazione” delle query. Ciò si fa prendendo l’input dell’utente e, invece che passarlo direttamente al database, lo si filtra con qualche metodo (ad esempio una funzione che controlli se sono solo lettere tramite espressioni regolari), disinnescando il pericolo.
Vignetta originale su [url=http://xkcd.com/327/]XKCD[/url].