Petit retour sur php

Rappel sur les quotes

Code php :

<?php
  $bob = 'toto';
  echo '<p>titi</p>\n';
  echo '<p>$bob</p>\n';
  echo "<p>$bob</p>";
?>

Code html produit :

<p>titi</p>
<p>$bob</p>
<p>toto</p>

Traitement des <input type="checkbox" />

Le code html :

  <form action="checkbox.php" method="get">
  <p>
    <input type="checkbox"
       id="check_entree"
       name="plats[]"
       value="entree"
       />
    <label for="check_entree">entrée</label>
    <!-- idem pour plat et dessert -->
  </p>
  <p>
    <input type="submit" value="envoyer" />
  </p>
  </form>

Notez bien les crochets dans l’attribut name.

Pour le traitement en php,
la fonction liste_plats, définie par exemple dans le head de checkbox.php :

<?php
function liste_plats()
{
   $res = '<ul>';
   foreach($_REQUEST['plats'] as $plat)
     $res .= "<li>$plat</li>\n";
   return $res . '</ul>';
}
?>

Le traitement lui-même, dans le body :

<?php
   if(isSet($_REQUEST['plats']))
     echo liste_plats();
   else
     echo '<p>ben vous mangez rien ?</p>'
?>

Voir le résultat : checkbox.html

Cette entrée a été publiée dans Cours, avec comme mot(s)-clef(s) , , , , , , , . Vous pouvez la mettre en favoris avec ce permalien.

4 réponses à Petit retour sur php

  1. Baptiste F dit :

    Cet article est concerné par le concours de hack… (c’est facile)

  2. Elisabeth Abbas Zadeh dit :

    Puisque c’est facile, je me lance…
    Il y a une faille XSS, il faut traiter l’information reçue par $_REQUEST, par exemple dans la fonction liste_plats() :
    au lieu de : $res .= "$plat\n";
    il faudrait avoir : $res .= "" . htmlspecialchars($plat) . "\n";
    Voilà ! Bon… j’ai combien de points en plus ? J’en mérite au moins 5 de plus, n’est-ce pas?

  3. Christophe dit :

    bon début :)
    Mais il faut aller plus loin…

  4. Christophe dit :

    Dans un commentaire sur l’article Concours de hack, Thomas explore la direction ouverte par Elisabeth.

    Mais ce qu’il suggère n’est manifestement pas l’usage qu’on souhaite autoriser dans cet exemple, donc la faille n’est encore que partiellement corrigée : on veut justement interdire la possibilité que le site affiche autre chose que ce qui est susceptible d’être envoyé par le page html contenant le formulaire.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Merci de répondre à cette question pour prouver que vous n'êtes pas un robot :

Combien font 3 multiplié par 4 ?