**PHP : Faille de comparaisons ** **1.Présentation** Php est un langage qui utilise le typage ( int pour un entier , string pour une chaine de caractère ...). Quand il compare deux variables il peut le faire de plusieurs manières différentes : La comparaison large ( == ) : - Il compare la valeur en utilisant le transtypage : convertit une des deux valeurs (ce qui donne de nombreux faux positifs) La comparaison stricte ( === ) : - Il compare le type et la valeur Les fonctions php : - Elles ont été développées pour comparer les variables. ex :strcmp Exemple de code vulnérable : Ou encore : **2.Exploitation** Le but est d'exploiter les faux positifs pour bypasser une authentification. __2.1 Méthode 1 : Comparaison large ( == )__ Pour bypasser la comparaison large il faut regarder le tableau des comparaisons (cf source). Une des lignes indique que "php" == 0 => renvoie true. Nous allons envoyer dans le formulaire ces données: login=0&password=0 Le php va l’interpréter de la manière suivante : if (0==0 && 0==0) Ce qui est toujours vrai. __2.2 Méthode 2 : fonction Strcmp__ Pour bypasser la fonction strcmp il faut utiliser un tableau. Nous allons envoyer dans le formulaire ces données: login[]=abc&password[]=abc Le php va générer une erreur mais va tout de même renvoyer true. **3.Comment se protéger** Pour se protéger il faut utiliser des comparaisons strictes ( === ). Il faut aussi toujours filtrer les valeurs envoyées par l'utilisateur avant de les utiliser. Source : [[http://php.net/manual/fr/types.comparisons.php]] [[http://danuxx.blogspot.fr/2013/03/unauthorized-access-bypassing-php-strcmp.html]]