PHP SELF et XSS
J'ai trouvé un article affirmant que $_SERVER['PHP_SELF']
est vulnérable à XSS.
Je ne suis pas sûr de l'avoir bien compris, mais je suis presque sûr que c'est faux.
Comment cela peut-il être vulnérable aux attaques XSS!?
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<!-- form contents -->
</form>
4 réponses
Pour le rendre sûr à utiliser, vous devez utiliser htmlspecialchars()
.
<?php echo htmlspecialchars($_SERVER["PHP_SELF"], ENT_QUOTES, "utf-8"); ?>
Voir Une vulnérabilité XSS dans presque toutes les formes PHP que j'ai jamais écrites pour savoir comment $_SERVER["PHP_SELF"]
peut être attaqué.
C'est en effet une vulnérabilité XSS. Je comprends que vous croyez que cela ne peut pas nuire à votre site Web, mais cela ne signifie pas que ce n'est pas réel.
Si vous ne le croyez pas, essayez ce qui suit:
Nous supposons que vous avez une page telle que " inscription.php". Nous supposons que vous avez un formulaire où l'action est:
<?php echo $_SERVER['PHP_SELF']; ?>
Comme vous le posez en effet:
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<!-- form contents -->
</form>
Maintenant, ajoutez simplement la chaîne ci-dessous
%27%22/%3E%3Cscript%3Ealert(1)%3C/script%3E
Ce n'est pas difficile à comprendre, car PHP_SELF c'est une réflexion de L'URL, votre application Lira tout ce que vous mettez dans L'URL et l'echo. C'est simple.
Htmlspecialchars devrait prendre soin de la question, aucune raison de contester la preuve.
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
<!-- form contents -->
</form>
Cependant, même ceci est une première étape dans le steeling d'un cookie, ce n'est pas qu'il ait lieu automatiquement. Même s'il est assez facile de concevoir l'attaque (car l'attaquant s'inscrira sur votre site et verra à quoi ressemble le cookie...etc.), une série d'autres facteurs doit être vrai pour arriver à la point d'avoir une situation de steeling cookie. Par exemple, le cookie ne doit pas être expiré. Que cela dépend de la complexité du cookie. Que peut-être vous avez d'autres précautions en place sur le serveur, il ne doit pas être toute l'authentification basée sur la présence de cookie!
Bien que je ne crois qu'il est assez difficile et vraiment mauvaise programmation pour toutes les conditions à remplir (même si yahoo.mail par exemple avait une telle vulnérabilité et si vous regardez sur internet vous trouverez même l'exploit et le décodeur de cookie), le XSS est réel et qui sait ce qu'un attaquant astucieux peut faire si votre site en souffre. Le remède est simple...
L'article même que vous avez lié vous donne:
http://www.example.com/form.php/%22%3E%3Cscript%3Ealert(‘xss attack’)%3C/script%3E%3Cbr%20class=%22irrelevant
Qu'est-ce qui n'est pas clair?
Edit: c'est une attaque XSS car je peux cacher un lien de mon site vers le vôtre avec un JS ajouté à l'URL qui m'envoie vos cookies donc au moment où vous cliquez sur ce lien, vous êtes pwnd.
Vous devriez utiliser filter_input () pour accéder aux superglobales en PHP. Si vous définissez le filtre sur FILTER_SANITIZE_FULL_SPECIAL_CHARS il supprimera les caractères dangereux généralement utilisés dans XSS. Compte tenu de votre exemple:
<form method="post"
action="<?php filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_FULL_SPECIAL_CHARS); ?>">
<!-- form contents -->
</form>