Bonjour à tous,
Je viens de passer pas mal d'heures à parcourir des forums qui expliquent que pour contrer les risques XSS quand on utilise la variable $_SERVER['PHP_SELF'], il faut utiliser les fonctions htmlentities ou htmlspecialchars, ce que je fais depuis des années.
Mais j'ai une commission d'experts sur le dos qui m'a fait remarquer que ce genre de protection (qui code les caractères sensibles comme les chevrons) est inefficace quand $_SERVER['PHP_SELF'] est insérée dans un évènement onclick. En effet, j'ai dans la page un bouton qui comporte l'évènement onclick="location.href=\'' . htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8') . '?supprimer=1\", ceci pour l'url shop.php?categorie=17.
Si un malin insère dans l'url un truc du genre shop.php/r'-alert(1)-'u?categorie=17, un simple clic sur le bouton va exécuter le javascript et ouvrir une fenêtre js affichant "1". htmlentities ou htmlspecialchars feraient obstacle à des balises <script> par exemple, mais là, comme on est dans un évènement js, pas besoin de balises pour exécuter le js.
Et même si les apostrophes sont codées en HTML, le script est exécuté. C'est effrayant !
Pour contrer cela, je peux au préalable filtrer $_SERVER['PHP_SELF'] pour y supprimer toutes les apostrophes et les guillemets, les parenthèses éventuellement, mais je me demande si c'est suffisant.
Je me demande aussi s'il existe une autre fonction que les 2 déjà citées pour contrer efficacement ce problème.
Merci à toutes les bonnes volontés.
Stéphane
Partager