PHP
description
Transcript of PHP
Traitements
1
Les dangers du PHPSimple au premier abord
Pas de typagePrincipe pas compliqué
Page internet testée pas beaucoup de mondeUtilisateur confirmés (hackeurs)
Le moindre bug peut être exploité
2
!!
Exemple de bugImaginons 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 :
3
Exemple de bugImaginons ensuite que l’on affiche la couleur
saisie :<?php print("Votre couleur est :".$_POST['color']); ?>
Normalement, on ne pourra avoir que : Votre couleur est redVotre couleur est red Votre couleur est greenVotre couleur est green Votre couleur est blueVotre couleur est blue
Mais…
4
Exemple de bugImaginez 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…
PirePire : il peut insérer des balises HTML pour faire changer de pagesGrâce au javascript :<script><script>document.location = 'http://evil.example.org/';document.location = 'http://evil.example.org/';</script></script>
5
ConclusionIl 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
6
Vérifications des valeursUtiliser les fonctions toutes faites, c’est le
minimum !Htmlspecialchars($var) :
$new = htmlspecialchars("<a href='test'>Test</a>");print $new; // <a href='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>7
Vérification des valeursFaire 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>
8
Vérification des valeursFaire 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) :
print substr('abcdef', 1,20); // bcdefprint substr('abcdef', 1, 3); // bcdprint substr('abcdef', 0, 4); // abcd
9
Finalement
Pour être sûr de ne pas avoir de problèmesproblè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 !
10