HyperText Markup Language, ou HTML, est le langage principal pour les pages Web sur Internet. Il inclut la prise en charge d'un certain nombre d'autres langages qui ajoutent des fonctionnalités et un style supplémentaires tels que JavaScript et CSS. Tous ces langages sont basés sur du texte avec des caractères significatifs utilisés pour séparer les chaînes littérales qui doivent être imprimées dans le navigateur et le code qui doit être interprété et exécuté.
Cette conception présente cependant quelques problèmes, ceux-ci deviennent évidents lorsque vous souhaitez imprimer l'un des caractères significatifs dans le navigateur. Les meilleurs exemples de caractères à utiliser sont les symboles « inférieur à » et « supérieur à ». Ces symboles sont respectivement utilisés pour ouvrir et fermer des segments de code en HTML. La méthode correcte pour imprimer ces caractères à l'écran en toute sécurité consiste à utiliser des entités HTML.
Entités HTML et sécurité
Grâce à ces caractères ayant une signification particulière, vous devez être très prudent pour vous assurer de les remplacer par la version de l'entité HTML si vous souhaitez qu'ils soient imprimés dans le navigateur. Malheureusement, de nombreux développeurs Web oublient que les utilisateurs peuvent soumettre des commentaires à de nombreux sites Web. Si cette entrée d'utilisateur comprend des caractères significatifs et qu'ils ne sont pas remplacés par des entités HTML, dans un processus appelé nettoyage, alors le site Web présente une vulnérabilité de scriptage intersites (XSS).
Astuce : n'essayez pas de soumettre des caractères spéciaux à des sites Web pour tenter de trouver des vulnérabilités XSS. Cela est techniquement piraté et constitue une infraction pénale, sauf si vous avez la permission du propriétaire du site Web.
Comment fonctionnent les entités HTML (et parfois non)
Les entités HTML fonctionnent parce que le navigateur sait l'afficher comme le caractère spécial pertinent et ne pas le traiter comme un caractère spécial. Toutes les entités HTML commencent par une esperluette « & » et se terminent par un point-virgule « ; ». La plupart des caractères sont identifiés par un numéro d'entité, bien que certains caractères spéciaux aient également un nom abrégé. Par exemple, "&", "<" et ">" ont les numéros d'entité "&", "<" et ">" ainsi que les noms d'entité "&", "<" et ">" respectivement. Le navigateur sait que ces chaînes signifient qu'il doit afficher les caractères pertinents.
Astuce : Une liste complète des noms d'entités de caractères peut être trouvée ici , bien que la prise en charge des noms d'entités varie selon le navigateur.
Dans la plupart des cas, les utilisateurs ne devraient jamais voir que les caractères que les entités HTML représentent. Il est cependant possible de voir des caractères encodés, communément l'esperluette « & », grâce à un processus appelé « Double encodage ». Cela se produit lorsque le caractère esperluette apparaît dans sa propre version codée. Le double encodage se produit généralement lorsque l'entrée est correctement encodée, car elle est soumise, cependant, lorsqu'elle est sortie, elle est à nouveau nettoyée. Il en résulte que l'esperluette au début du "&" est encodée une deuxième fois et apparaît comme "&", le navigateur interprète alors correctement cela comme une chaîne qui doit être imprimée comme "&" après avoir décodé l'entité HTML et ignoré l'entité partielle.