Le sql injection

Le sql injection sono le iniezioni di codice in una query e possono rappresentare un grave problema per la protezione dei database.
Evitarle è piuttosto semplice, basta prendere i dovuti accorgimenti quando creiamo i nostri script.

Vediamo degli esempi con PHP ma teniamo conto che ogni linguaggio di programmazione permette di implementare tutti i sistemi di sicurezza necessari ad evitare le sql injection.

La funzione mysql_real_escape_string() di PHP aggiunge la sequenza di "escape" ai caratteri speciali (tenendo conto dell'attuale set di caratteri della connessione. Un altro accorgimento da prendere è la costruzione delle query con la definizione giusta di stringhe.
Un esempio:

$sql = 'SELECT * FROM tabella WHERE id = '.$id;

Questa stringa può causare problemi: mettiamo che $id venga da $_GET e debba essere un numero, se facciamo in modo che $id sia 1 OR 1 = 1, la query diventa:

SELECT * FROM tabella WHERE id = 1 OR 1 = 1

il che ritorna tutte le righe, aprendo cosi il nostro database al visitatore malintenzionato.

Se pero' scriviamo la stessa query così:

$sql = 'SELECT * FROM tabella WHERE id = "'.$id.'"';

$id potrà assumere il valore 1 OR 1 = 1 e la query diventa:

SELECT * FROM tabella WHERE id = "1 OR 1 = 1"

In questo caso, dato che abbiamo definito la stringa, la query non produce alcun risultato.

Un altro metodo efficace per evitare l'sql injection è fare controlli molto precisi sulla validità dei valori inseriti dall'utente nei form di modo che sia valido solo lo strettamente necessario. E' poco controllare che un campo obbligatorio non sia una stringa di zero caratteri: se è un nome accetta solo lettere e spazi, se è un CAP accetta solo 5 numeri, e cosi via.

Nel primo esempio, se sappiamo che $id è un campo di MySQL INT e auto_increment, il suo valore potrà essere solo un valore numerico: un controllo sulla stringa 1 OR 1 = 1 non eseguirà la query perché il risultato del controllo riporterà che non intero.

Sperando che possa essere di aiuto, invito tutti a contattarmi per segnalare ulteriori altri controlli.

Grazie a |andrea|

Inserisci un commento:


Il contenuto di questo campo è tenuto riservato e non verrà reso pubblico.

Condividi

Se ti piace questo articolo, puoi collegarlo al tuo sito copiando il seguente codice HTML nelle tue pagine.

Acquista libri di informatica

Acquista qui il tuo software

Ultimi commenti