Page 186 - Corso di PHP - Livello base
P. 186
l'account dell'amministratore.
Qual è pertanto il modo più sicuro per difendersi da questo tipo
di attacco? Non dovremo far altro che aggiungere una funzione
per controllare i dati immessi dall'utente, e si tratta della
funzione mysql_real_escape_string, che inserisce i giusti
caratteri di escape prima dei caratteri “pericolosi”. Riceve come
parametro semplicemente la stringa a cui aggiungere i parametri
di escape. Quindi la stringa della nostra query dovrà assumere
questa forma per evitare attacchi:
$query = "SELECT * FROM autori WHERE Nickname = '".
mysql_real_escape_string($_POST['nickname']) ."' AND Password = '".
mysql_real_escape_string($_POST['psw']). "'";
Riusciremo così a rendere inoffensivo l'attacco del
malintenzionato, perché l'ultima stringa che abbiamo visto
risulterà invece in questo modo:
$query = "SELECT * FROM autori WHERE Nickname =
'Federico\' -- AND Password =
''";
Questa funzione va utilizzata solo nel caso in cui magic quotes
gpc sia disattivo. Per essere però del tutto sicuri utilizziamo la
funzione get_magic_quotes_gpc, che controlla la
configurazione delle magic quotes (non riceve alcunché come
parametro) e utilizzarla in un ciclo if:
if(get_magic_quotes_gpc())
{
$query = "SELECT * FROM autori WHERE Nickname = '". $_POST['nickname'] ."' AND
Password = '". $_POST['psw']. "'";
}
else
{
186