PHP/MySQL: Evitare l'SQL injection

PHP/MySQL: Evitare l'SQL injection

Come prevenire il SQL injection con PHP

Siete alle prese con la vostra area riservata, ma quando avete terminato la sezione relativa alla vostra login qualcuno vi ha parlato di SQL injection?

Ho visto il terrore nei vostri occhi!

Non voglio assillarvi, ma spiegherò in breve in cosa consiste.

L' SQL Injection è una tecnica molto basilare e diffusa di hacking, la quale mira a colpire quei siti web che si appoggiano su un DBMS di tipo SQL.

Cosniste nell'inserire nelle input, pezzi di codici SQL che andranno a d eseguirsi all'interno della vostra query.

Ad esempio, supponiamo che la vostra query sia:

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

Se nella input relativa alla password inseriamo il valore 1' OR '1'='1' la nostra quesry diverrà:

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

In questo caso permetterà l'accesso all'utente.

Questo ovviamente è uno dei casi, ma potrebbero anche modificare i dati all'interno della vostra tabella o addirittura eliminare la tabella stessa.

Passiamo dunque ad una delle soluzioni possibili:

$username_q = addslashes($username);
$password_q= addslashes($password);

$query = sprintf("SELECT * FROM users WHERE username = '%s' AND password = '%s';",
mysqli_real_escape_string($con, $username_q),
mysqli_real_escape_string($con, $password_hash_q));

In questo modo renderemo lo script immune all’attacco SQL Injection descritto sopra.

Infatti se passassimo nuovamente a passare nela campo Password la stringa 1′ OR ‘1’=’1 otterremo la seguente query:

SELECT * FROM users WHERE username = 'admin' AND password = '1\' OR \'1\'=\'1';

non producendo nessun risultato.


loader