Page 1545 - Informatica dalla A a Z
P. 1545
echo "Spiacente, password errata";
}
La funzione mysql_num_rows restituisce il numero dei record trovati dalla query (nel no-
stro caso uno, anche perché si suppone che gli username siano univoci) e riceve come pa-
rametro il risultato della query. Pertanto se la funzione dà come risultato 1, cioè trova il
record, l’utente sarà loggato, in caso contrario manderà un messaggio all’utente, infor-
mandolo di aver inserito una password errata.
Questo codice è estremamente vulnerabile, soprattutto se l’impostazione magic quotes
gpc di PHP è disattivata.
Nota: in locale potete controllarlo su WAMP cliccando sull'icona nella barra delle applica-
zioni, quindi andare alla voce PHP e ancora su Impostazioni PHP.
650
Purtroppo non tutti i provider attivano le magic quotes sui loro server.
Il malintenzionato, potrebbe agire così:
Nella casella nickname può inserire il nome “Fulvio”, e fin qui niente di strano, ma nella
casella password potrebbe tranquillamente inserire:
OR Nickname='Fulvio’
Così facendo, il codice eseguirebbe questa query:
$query = "SELECT * FROM autori WHERE Nickname = 'Fulvioo' AND Password = '' OR Nic-
kname='Federico'";
La clausola OR inserita dal malintenzionato vanificherebbe il controllo sulla password.
Per scongiurare questo meccanismo, la prima cosa da fare sarà quella di criptare le pas-
651
sword attraverso la funzione md5 , la quale riceve come parametro semplicemente la
stringa da criptare.
$query = "SELECT * FROM autori WHERE Nickname = '{$_POST['nickname']}' AND Pas-
sword = '". md5($_POST['psw']). "'";
Questo però non è ancora sufficiente, perché scrivendo nella casella del nickname la
stringa:
Fulvio’ -- (inserendo anche uno spazio dopo i 2 trattini)
Si avrebbe questo effetto:
$query = "SELECT * FROM autori WHERE Nickname = 'Fulvio' -- AND Password =''";
Nota: I due trattini nel linguaggio SQL indicano i commenti, pertanto tutto ciò che viene
dopo i due trattini sarà ignorato.
650
Le magic quotes sono un processo che aggiunge in automatico i caratteri di escape alle stringhe. Purtroppo a partire dalla
versione 5.3.0 di PHP, magic quotes è deprecato e nella versione 6 addirittura non c'è più.
651
MD5 è un algoritmo crittografico di hashing, realizzato nel 1991 da Ronald Linn Rivest, un crittografo statunitense. L'algo-
ritmo trasforma una stringa in un’altra stringa a 128 bit, e non è possibile risalire alla stringa originale.
1541