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)
Esempio codice di protezione
$protQuery = $pdo->prepare('SELECT * FROM landofworld WHERE test = ?');
if ($protQuery->execute($_POST['test'])) {
$risultato = $protQuery->fetchAll(\PDO::FETCH_ASSOC);
...
}