Claudiogarau.it :: Tutorials & Scripts, PHP, Linux and more.

Home ~ Php :: Sicurezza delle basi di dati ed SQL injections :: Indice Php

Sicurezza delle basi di dati ed SQL injections

Categoria: Php Inserito il: 10-07-2006 Stampa (4685 click)

Le SQL injections rappresentano la tipologia di attacco che si verifica più frequentemente contro le basi di dati accessibili via Web. Esse consistono nella possibilità di effetture richieste 'inaspettate' al DBMS, generalmente tramite form, utilizzando caratteri speciali come ', %, * o #.

Immaginiamo di avere un form per l'autenticazione simile al seguente:

<form method="post" action="login.php"> 
User : <input type="text" name="usr"><br /> 
Password : <input type="password" name="pwd"><br /> 
<input type="submit" value="Invia"> 
La SELECT destinata all'autenticazione dell'utente potrebbe essere simile alla seguente:
$sql = "SELECT * FROM tb WHERE 
usr = '".$_POST['usr']. "' AND pwd = '".$_POST['pwd']."'";
Ora, qualche malintenzionato potrebbe venire a conoscenza del fatto che la user dell'utente che ha l'accesso sia "staff", "root" o "admin"; in questo caso egli potrebbe scavalcare l'esigenza di conoscere la parola chiave associata all'utente con un semplice espediente:
$sql = "SELECT * FROM tb WHERE usr = 'staff'#' AND pwd = 'blah'";
Il carattere speciale # viene interpretato come un'istruzione che dice "ignora tutto quello che si trova dopo questo carattere", il cancelletto è infatti notoriamente utilizzato per i commenti, la password quindi non gli sarà più necessaria!

Per fortuna difendersi dalle SQL injections non è poi molto difficile, PHP mette a disposizione numerose funzioni che possona aiutarci contro gli attacchi alle nostre basi di dati. Si osservi per esempio il seguente listato:
<?
$usr = trim(htmlspecialchars(addslashes($_SESSION['usr'])));
$pwd = trim(htmlspecialchars(addslashes($_SESSION['pwd']))); 
$sql = "INSERT INTO tb VALUES (md5($usr), md5($pwd))"; 
?>
La funzione trim() elimina gli spazi ed altri caratteri all'inizio e alla fine di una stringa; htmlspecialchars() permette di convertire i caratteri speciali in entità HTML 'innocue'; addslashes() produce una stringa contenente '\' anteposto ai caratteri che richiedono il quoting nelle query dei database come: apici singoli, doppi apici, backslash e il byte NULL; infine, md5() converte una stringa in un numero esadecimale di 32 caratteri all'interno del quale essa viene criptata.

Attenzione: questo articolo è stato concesso in esclusiva per la pubblicazione a Mrwebmaster.it; ne è vietata la riproduzione,
anche parziale, senza l'esplicito consenso dell'autore e della redazione di Mrwebmaster.it.

Cerca nel sito
Per sito
Sviluppatore di applicazioni Web con competenze evolute nella progettazione delle basi di dati, autore per alcune delle più importanti testate on line dedicate alla manualistica tecnica (HTML.it, MrWebmaster.it, Edit) e consulente per l'e-learning.
Tutte le categorie
Tutorial Random
Una funzione in PHP per creare introduzioni agli articoli
Una delle forme più comuni per la presentazione degli articoli di un sito internet è quella di anticipare in Home... Leggi l'articolo
Corsi online per sviluppatori
Corsi per Webmaster, Web Designer, Programmatori, Grafici e Sistemisti