PHPSviluppo

PHP – Proteggersi da SQL/MySQL Injection

PHP – Proteggersi da SQL/MySQL Injection

 

Non tutti sanno che quando si programma utilizzando un database SQL/Mysql per effettuare richieste POST o GET, questo è esposto a rischi elevatissimi come ad esempio SQL/MySQL Injection. I programmi più a rischio sono soprattutto le Web Application in quanto utenti malintenzionati possono tranquillamente effettuare delle semplici o complesse query cercando di ottenere più dati possibili dal database.

Che cosa è il MySQL Injection?

Il MySQL Injection (o SQL Injection) è una tecnica a iniezione che permette di effettuare delle query bypassando i controlli sfruttando, appunto, le vulnerabilità di sicurezza delle query SQL o MySQL.

Esempio di attacco MYSQL Injection

Il classico esempio di attacco può avvenire ad esempio utilizzando un <input> di tipo testo:

<input class="test" name="test" type="text">

All’interno della input text un utente malintenzionato può scrivere semplicemente:

' OR '1'='1

e visualizzare la tabella contenente i dati del database sql/mysql.

Cosa succede lato server?

Facciamo un esempio di una semplice query che si trova all’interno di un file PHP:

$test = filter_input(INPUT_POST, 'test');
query(SELECT * FROM landofworld WHERE test = '$test');

Lato server recupera il testo inserito lato client cioè ‘ OR ‘1’=’1, quindi la query sarà la seguente:

query('SELECT * FROM landofworld WHERE test = '' OR '1'='1');

Come proteggersi?

Una delle migliori protezioni lato server è proprio dovuto dal potentissimo PHP che semplicemente possiamo proteggerci utilizzando vari metodi (guide presenti direttamente sul sito ufficiale di PHP.net):

MySQLi (MySQL Improved Extension)

PDO (PHP Data Objects)

mysql_real_escape_string

Esempio codice di protezione

$protQuery = $pdo->prepare('SELECT * FROM landofworld WHERE test = ?');
if ($protQuery->execute($_POST['test'])) {
   $risultato = $protQuery->fetchAll(\PDO::FETCH_ASSOC);
   ...
}
/ 5
Grazie per aver votato!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *