Page 182 - Corso di PHP - Livello base
P. 182
Il secondo problema di vulnerabilità che vediamo in questo
capitolo è la cosiddetta SQL Injection (iniezione di SQL).
Anche in questo caso l'attacco prende di mira form scritti male
per eseguire un codice SQL malevolo, e adesso vedremo nel
dettaglio in cosa consiste questa pratica e perché è tanto
pericolosa. Prendiamo per esempio questo semplice form per
connettersi a un sito:
<form action="login.php?step=2" method="post">
Nickname:<br />
<input type="text" name="nickname" /><br />
Password: <br />
<input type="password" name="psw" /><br />
<input type="submit" name="invia" value="Invia!" /><br />
</form>
In questo caso il nostro form, invece di rimandare a una nuova
pagina, rimanda alla stessa ma con l'aggiunta della query string
?step=2, in modo da scrivere tutto nella stessa pagina.
L'azione del form andrà quindi scritta in un blocco if di questo
tipo:
if (isset($_GET['step']) && $_GET['step'] == 2)
{
// azione
}
else
{
}
Ipotizziamo anche che il gestore del sito o del blog sia stato così
sprovveduto da aver fatto in modo che le password vengano
inserite in chiaro nel database (quindi senza criptarle
attraverso il form di registrazione). Ora prendiamo il pessimo
script che esegue il controllo sui dati immessi dall'utente:
182