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
   1540   1541   1542   1543   1544   1545   1546   1547   1548   1549   1550