Page 184 - Corso di PHP - Livello base
P. 184
magic quotes è deprecato e nella versione 6 addirittura non
c'è più.
Vediamo quindi cosa può fare il malintenzionato. Nella casella
nickname può inserire il nome “Federico”, e fin qui niente di
strano. Ma nella casella password può tranquillamente inserire
questa stringa:
' OR Nickname='Federico
Così facendo, il nostro codice eseguirebbe questa query:
$query = "SELECT * FROM autori WHERE Nickname = 'Federico' AND Password =
'' OR Nickname='Federico'";
La clausola OR inserita dal malintenzionato vanificherà il
controllo sulla password: questo perché la query strutturata in
tal modo dice di selezionare tutti i record della tabella autori il
cui nickname sia Federico e la cui password sia vuota oppure,
in alternativa a quest'ultima clausola, il cui nickname sia
Federico. Dal momento che la seconda clausola è soddisfatta il
malintenzionato riuscirà a entrare agevolmente al posto di
Federico all'interno del sito, spacciandosi per lui e magari
rubando i suoi dati... o insomma facendo tutto ciò che di cattivo
si può fare entrando nel profilo di un'altra persona.
La prima operazione da fare è criptare la password attraverso
la funzione md5: nel database non dovrà essere inserita in
chiaro ma andrà fatta passare attraverso questa funzione (in
un'ipotetica query con comando INSERT INTO metteremo tra i
VALUES 'md5($_POST['password']'). MD5 è un algoritmo
crittografico di hashing che fu realizzato nel 1991 da Ronald
Linn Rivest, un crittografo statunitense: l'algoritmo trasforma
una stringa in un'altra stringa a 128 bit, e non è possibile
risalire alla stringa originale (se non andando... a tentativi). La
184