100 likes | 233 Vues
PHP. Traitements. Les dangers du PHP. Simple au premier abord Pas de typage Principe pas compliqué Page internet testée pas beaucoup de monde Utilisateur confirmés (hackeurs) Le moindre bug peut être exploité. !. Exemple de bug. Imaginons le formulaire suivant :
E N D
PHP Traitements
Les dangers du PHP • Simple au premier abord • Pas de typage • Principe pas compliqué • Page internet testée pas beaucoup de monde • Utilisateur confirmés (hackeurs) Le moindre bug peut être exploité !
Exemple de bug • Imaginons le formulaire suivant : <form action="/process.php" method="POST"> <select name="color"> <option value="red">red</option> <option value="green">green</option> <option value="blue">blue</option> </select> <input type="submit" /> </form> • Il doit produire l’affichage suivant :
Exemple de bug • Imaginons ensuite que l’on affiche la couleur saisie : <?phpprint("Votre couleur est :".$_POST['color']); ?> • Normalement, on ne pourra avoir que : • Votre couleur est red • Votre couleur est green • Votre couleur est blue • Mais…
Exemple de bug • Imaginez qu’un attaquant modifie le formulaire : <form action=" http://example.org/process.php" method="POST"> < input type="text"name="color"> <input type="submit" /> </form> • Il peut alors envoyer n’importe quelle couleur… • Pire : il peut insérer des balises HTML pour faire changer de pages • Grâce au javascript : <script> document.location = 'http://evil.example.org/'; </script>
Conclusion • Il existe une multitude de risque • Beaucoup d’autre « bugs » • Il existe beaucoup de « petits malins » • Le hacking attire beaucoup ! • On est jamais trop prudent • Toujours vérifier ce que l’on reçoit
Vérifications des valeurs • Utiliser les fonctions toutes faites, c’est le minimum ! • Htmlspecialchars($var) : $new = htmlspecialchars("<a href='test'>Test</a>");print $new; // <ahref='test'>Test</a> • strip_tags ($var,"<p><b>…") : $new = strip_tags("<b>Test</b>","");print $new; // {vide} $new = strip_tags("<b>Test</b><i>toto</i>","<b>"); print $new; // <b>Test</b>
Vérification des valeurs • Faire ses propre fonctions, en utilisant : • str_replace($what,$with,$phrase) : $voyelles = array("a", "e","i","o","u","A","E","I","O","U");print$consonnes = str_replace($voyelles, "", "Bonjour le monde"); // Génère : Bnjr l mnd $phrase = "Vous devriez manger des fruits et des légumes les jours.";$regime= array("fruits", "légumes");$bonne_chere = array("pizzas", "gâteaux"); print$newphrase= str_replace($regime,$bonne_chere,$phrase); // Génère : Vous devriez manger des pizzas et des gâteaux tous les jours. $phrase = "<b>Titi</b><i>Lelore<i><h1>Prof</h1>";$balises = array("<", ">");$codeBalises = array("<", ">"); print$newphrase= str_replace($balises,$codeBalises,$phrase); // Génère : <b>Titi</b><i>Lelore<i><h1>Prof</h1>
Vérification des valeurs • Faire ses propre fonctions, en utilisant : • strcmp($phrase1,$phrase2) : • Retourne < 0 si $phrase1 est inférieure à $phrase2; • Retourne > 0 si $phrase1 est supérieure à $phrase2, • Retourne 0 si les deux chaînes sont égales. • substr($phrase,$debut,$longueur) : printsubstr('abcdef', 1,20); // bcdefprintsubstr('abcdef', 1, 3); // bcdprintsubstr('abcdef', 0, 4); // abcd
Finalement Pour être sûr de ne pas avoir de problèmes(récupération de mots de passe…), il faut toujours filtrer les valeurs reçues de formulaires, même ceux qui paraissent sans importance !