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
   179   180   181   182   183   184   185   186   187   188   189