La tecnica SQL Injection può davvero compromettere la sicurezza del vostro blog #1

Il PHP è il linguaggio di scripting attualmente più utilizzato nel web anche e soprattutto per la sua facilità di uso. Anche utenti poco esperti possono avvicinarsi a questo linguaggio e realizzare applicazioni funzionanti nel giro di poco tempo. Ma come in tutte le cose che, in apparenza sembra no facili, occorre porre molta attenzione al tema sicurezza. Scrivere codice funzionante sarà anche abbastanza agevole, ma scrivere codice sicuro e senza vulnerabilità è un altro paio di maniche.
A tal proposito oggi vi introduco l’argomento della SQL Injection ovvero di una delle tecniche più sfruttate dagli hacker per bucare facilmente un sito o un blog. In questo articolo parlerò della tecnica e di come viene utilizzata e, in una seconda parte, vedremo come prevenirla prima che sia troppo tardi.
Uno degli esempi più tipici di Sql-Injection è quello che riguarda la modifica di una classica query di SELECT per accedere a dati che, di nomra,  non sarebbero visibili all’utente o, peggio ancora, ottenere accesso ad un sistema di autenticazione con i privilegi di amministratore. Capite fin da subito quali enormi rischi si corrono qualora non si ponga la giusta attenzione nella scrittura del codice.

Esempio
Classico caso di un semplice sistema di controllo dello username e password dell’utente che si autentica su un sito. Avremo due pagine coinvolte :
login.php ci sarà la form html classica per l’input dei dati
check.php qui viene effettuato il controllo dell’accesso.

La login.php sarà del tipo :

Login: Password:

Dopo aver inserito i dati e premuto il pulsante, la login.php effettuerà il POST sulla pagina check.php che dovrà verificare sul database la correttezza dei dati inseriti dall’utente
Ecco invece come potrebbe essere la check.php supponendo di avere una connessione Mysql denominata $DB.


Normalmente (se l’utente ha inserito i dati dalla form di input) questa classe dovrà verificare query del tipo: “ SELECT * FROM users WHERE username=’mario’ AND password=’rossi2009′ ” .
Questo di norma, ma siamo davvero a un passo dal compromettere la sicurezza del nostro sito. Ecco perchè.

Se un hacker (nemmeno troppo esperto) volesse inserirsi nel buco del codice sopra riportato non dovrebbe fare altro che aggiungere alla nostra query SQL un ulteriore condizione WHERE per renderla sempre verificata cosicchè MySQL trovi almeno un risultato e setti a 1 il valore della variabile $auth

Esempio pratico : inserire un utente nel campo utente e la seguente password: “ 123′ OR ‘’=’ ” (123 è logicamente un valore inserito come esempio)

Vediamo come risulterebbe, così, la query eseguita :

“ SELECT * FROM users WHERE username=’mario’ AND password=’123′ OR ‘’=” ”. Nessun errore MySQL, ma, addirittura autenticazione corretta. Infatti, aggiungendo OR ”=” una delle condizioni è sempre verificata e MySQL troverà almeno un risultato. Questo perchè l’apice di chiusura è aggiunto dalla query PHP e, nelle intenzioni, doveva chiudere il campo password.

In conclusione, prima di rimandarvi alla seconda parte su come prevenire il rischio di SQL Injection, vale la pena rimarcare che è sempre sconsigliato utilizzare per lo username dell’amministratore termini scontati come admin o root.

2 Commenti all'articolo

  1. PHP - Come rimuovere i tags html da una stringa | Pecciola - 29 luglio 2010

    [...] Una delle regole fondamentali di ogni webmaster dovrebbe essere quella di non fidarsi mai di ciò che proviene dal web. Chi lascia informazioni sul nostro blog, ad esempio, potrebbe inviare volontariamente o meno, dati “contaminati” che potrebbe danneggiare o mettere a repentaglio la sicurezza del blog. Stesso discorso per un’applicazione sul web, logicamente. L’inserimento di tag HTML, se inviati al browser, potrebbe non solo rovinare il layout delle nostre pagine, ma anche esporre ad attacchi pericolosi come la temuta SQL Injection. [...]

  2. Sicurezza su Wordpress : cambiare il prefisso di default alle tabelle del database | Pecciola - 16 novembre 2010

    [...] un articolo di qualche tempo fa avevo presentato la tecnica SQL Injection, ovvero una delle tecniche più sfruttate da hacker o malintenzionati per compromettere [...]

Lascia un commento