echo $ bonjour
Vous venez gagné une vulnérabilité d'injection de HTML. Si quelqu'un envoie votre utilisateur à:
http://www.example.com/madlib01.php?name=<script>stealYourCookies()</script>
vous avez des problèmes.
Oui, il s'agit d'un script My First PHP. Cela ne rend pas la sécurité optionnelle. C'est une erreur que fait chaque tutoriel: enseigner une mauvaise pratique dès le départ, traiter l'exactitude (et la sécurité, qui est un sous-ensemble de la correction) comme un supplément facultatif.
Le résultat est que la plupart du code PHP est plein de trous. Mais tu n'as pas besoin de l'être! Chaque fois que vous placez une chaîne pure texte dans un contexte HTML environnant, échapper correctement:
echo htmlspecialchars($hello);
Je tends à définir une fonction avec un nom plus court que « htmlspecialchars » de le faire pour moi, comme je suis paresseux.
<?php
function h($text) {
echo(htmlspecialchars($text, ENT_QUOTES));
}
$name= '';
if (isset($_REQUEST['name']))
$name= trim($_REQUEST['name']);
?>
...
<?php if ($name!=='') { ?>
<p> Hello, <?php h($name); ?>! </p>
<?php } ?>
<form method="get" action="madlib01.php">
<p>
<label for="namefield">Name:</label>
<input id="namefield" type="text" name="name" />
</p>
<p>
<input type="submit" />
</p>
</form>
Maintenant, si vous dites que votre nom est Monsieur script <>, la page vous accueillera exactement comme tels, équerres et tous, au lieu d'essayer d'exécuter JavaScript. C'est la sortie correcte et donc également sécurisée.
Vous essayez de faire apparaître l'écho juste après avoir appuyé sur le bouton. Vous ne pouvez pas faire cela avec PHP, c'est une technologie côté serveur. Essayez JavaScript ou une autre technologie côté client. – defines