Membres


Pas encore membre ?
inscrivez-vous ici

Connexion :
Login
Code
Mot de passe perdu ?
Liste des membres

Possible exploit XSS dans $_SERVER[

Possible exploit XSS dans $_SERVER[

Possible exploit XSS dans $_SERVER[


Sean Coates relate sa découverte des XSS là où il l'attendait pas : dans $_SERVER["PHP_SELF"].

Articles web 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 ;):

écrit par sky




Poster un commentaire sur cette article

  • Le 19-05-2005, 3run0 a écrit :
    merci pour la traduction ;)

  •  
  • Le 19-05-2005, chapo a écrit :
    en + des boucle de sécu sur GET et POST, va falloir faire sa sur $_SERVER, mais ou va t-on ^^

  •  

Pseudo :
Texte :
Recopier ce code : ici

Nous  -  Plan du site  -  Informations légale  -  Contact  -  © Graphiks.net