Espace membres

Bonjour Anonyme

Inscription

Email :
Mot de passe :

Mot de passe oublié ?

Nos scripts

MySpeach

MySpeach est un chat php sans base de donnée, rapide, léger et facile à prendre en main. DEMO

MyPHPUpload

MyPHPUpload est un script d'upload sécurisé écrit en PHP. DEMO

GrapAgenda

Agenda PHP et MySQL avec comptes utilisateurs et administration. DEMO

Livre PHP

Possible exploit XSS dans $_SERVER[

> écrit par sky le 19-05-2005

Sean Coates relate sa découverte des XSS là où il l'attendait pas : dans $_SERVER["PHP_SELF"]. [imga]upload/php-logo.jpg[/imga] Les XSS consistent à injecter du code JavaScript dans une page, en faisant placer des données dans le code HTML par le script PHP. Le grand classique est
echo $_GET["x"];. qui injecte toute la variable x passée en méthode GET dans le code HTML. Il ne reste plus qu'à donner à x un peu de code Javascript, et le tour est joué.

Outre _GET, _POST et _COOKIE, il est recommandé de de pas utiliser _SERVER non plus. Sean vous explique pourquoi.

Pour en savoir plus : Faille XSS
Lu sur http://www.nexen.net


Après tests, cette faille fonctionnera que sur les serveurs ayant les magic_quotes_gpc = Off. Si elle sont à magic_quotes_gpc = On, ça ne marchera pas.


Bon, pour ceux qui ne pige pas grand à l'anglais, voici les explication simplifiés :

Si vous utiliser ce genre de code (page simple.php):
<html>
 <body>
  <?php
  if (isset($_REQUEST['submitted']) && $_REQUEST['submitted'] == '1') {
    echo "Form submitted!";
  }
  ?>
  <form action="<?php echo $_SERVER['PHP_SELF']; ?>">
   <input type="hidden" name="submitted" value="1" />
   <input type="submit" value="Submit!" />
  </form>
 </body>
</html>


Le code html de la page généré sera donc :
<html>
 <body>
  <form action="/tests/simple.php">
   <input type="hidden" name="submitted" value="1" />
   <input type="submit" value="Submit!" />
  </form>
 </body>
</html>


Maintenant, changer l'url de cette façon :
http://www.example.com/simple.php/%22%3E%3Cscript%3Ealert('xss')%3C/script%3E%3Cfoo

Le code HTML de la page généré deviendrai :
<html>
 <body>
  <form action="/tests/simple.php/"><script>alert('xss')</script><foo">
   <input type="
hidden" name="submitted" value="1" />
   <input type="
submit" value="Submit!" />
  </form>
 </body>
</html>



La solution ? :
<html>
 <body>
  <?php
  if (isset($_REQUEST['submitted']) && $_REQUEST['submitted'] == '1') {
    echo "Form submitted!";
  }
  ?>
  <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">
   <input type="hidden" name="submitted" value="1" />
   <input type="submit" value="Submit!" />
  </form>
 </body>
</html>


C'est vraiment une version simplifié, mais, je crois exact ;):

Commentaires

Aucun commentaire. Soyez le premier !

Pseudo
Email
Commentaire

Merci d'écrire le code ici :