Quels caractères doivent être échappés sur HTML?

sont-ils les mêmes que XML, peut-être plus l'espace one (&ampnbsp;)?

j'ai trouvé quelques énormes listes de caractères HTML d'évasion mais je ne pense pas qu'ils doit être échappé. Je veux savoir ce dont a besoin pour s'échapper.

174
demandé sur Ahmet 2011-09-12 03:24:07

4 réponses

si votre document est unicode, vous avez seulement besoin d'échapper aux mêmes que pour XML dans votre texte [ spec ] [ doc ] :

& becomes &
< becomes &lt;
> becomes &gt;

dans les valeurs d'attribut, vous devez également échapper au caractère de citation [ spec ] :

" becomes &quot;
' becomes &#39;

si votre document est un ASCII ou un autre encodage non Unicode et que vous utilisez des caractères qui ne sont pas soutenus, vous aurez besoin d'échapper à eux. Sinon, vous êtes très bien 1 .

vous ne voulez généralement pas vous échapper des espaces comme &nbsp; . &nbsp; n'est pas un espace normal, c'est un espace sans rupture [ wiki ] . Vous pouvez utiliser ceux-ci à la place des espaces normaux pour empêcher une rupture de ligne d'être insérée entre deux mots, ou pour insérer de l'espace supplémentaire sans qu'il soit automatiquement effondré, mais vous n'aurez pas besoin de le faire très souvent.


1 vous êtes bien, tant que vous insérez le texte échappé quelque part qu'il est logique d'insérer du texte ordinaire (c.-à-d. pas à l'intérieur d'une étiquette <style> ou <script> , et pas à l'intérieur d'une valeur d'attribut). Sinon, vous devez prendre d'autres précautions comme indiqué dans réponse de daxelrod et décrit ici par L'Open Web Application Security Project .

200
répondu Jeremy Banks 2017-09-10 17:38:49

cela dépend du contexte. Quelques contextes possibles en HTML:

  • corps du document
  • dans les attributs communs
  • à l'intérieur des balises de script
  • à l'intérieur de balises de style
  • plusieurs autres!

Voir OWASP Cross Site Scripting de Prévention de la Feuille de Triche , en particulier le " Pourquoi ne puis-je pas Juste Entité HTML Encoder Des Données Non Fiables? " et " XSS des Règles de Prévention sections". Cependant, il est préférable de lire l'ensemble du document.

19
répondu daxelrod 2011-09-12 01:06:36

fondamentalement, il y a Trois Caractères principaux qui devraient toujours être échappés dans vos fichiers HTML et XML, de sorte qu'ils n'interagissent pas avec le reste des markups, donc comme vous vous y attendez probablement, deux d'entre eux vont être les enveloppements syntaxiques, qui sont <>, ils sont listés comme ci-dessous:

 1)  &lt; (<)

 2)  &gt; (>)

 3)  &amp; (&)

aussi, nous pouvons utiliser double-citation ( ") comme "et la seule citation (' ) as & apos

éviter de mettre dynamique contenu dans <script> et <style> .Ces règles ne sont pas appliquées. Par exemple , si vous devez inclure JSON dans a, remplacez < par \x3c, le caractère U+2028 par \u2028, et U+2029 par \u2029 après la sérialisation de JSON.)

HTML caractères D'échappement: liste complète: http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php

donc vous avez besoin d'échapper <, ou & quand suivi de quelque chose que pourrait commencer une référence de caractère. En outre, la règle sur les ampersands est la seule règle de ce type pour les attributs cités, car le guillemet correspondant est la seule chose qui va en terminer un. Mais si vous ne voulez pas y supprimer la valeur de l'attribut, évitez le guillemet.

changer en UTF-8 signifie sauvegarder à nouveau votre fichier:



Utiliser le caractère encoding UTF-8 pour votre page signifie que vous pouvez éviter le besoin de la plupart s'échappent et travaillent avec des personnages. Notez, cependant, que pour changer l'encodage de votre document, il ne suffit pas de changer la déclaration de codage en haut de la page ou sur le serveur. Vous besoin de sauvegarder à nouveau votre document dans ce codage. Pour aider à la compréhension comment faire avec votre application lire le paramètre encodage dans le web création des applications.

caractères invisibles ou ambigus:

un rôle particulièrement utile pour les évasions est de représenter des personnages qui sont invisibles ou ambiguës dans leur présentation.

un exemple serait le caractère Unicode U+200F marque de droite à gauche. Ce le caractère peut être utilisé pour clarifier la directionalité dans le texte bidirectionnel (eg. en utilisant les scripts en arabe ou en hébreu). Il n'a pas la forme d'un graphique, cependant, il est difficile de voir où les personnages sont dans l' texte, et si ils sont perdus ou oubliés ils pourraient créer inattendu résultats lors d'une édition ultérieure. En utilisant (ou son caractère numérique l'équivalent de référence) au lieu de cela rend très facile à repérer ces caractères.

un exemple de caractère ambigu est U+00A0 NO-BREAK SPACE. Ce le type d'espace empêche la rupture de ligne, mais il ressemble à n'importe quel autre l'espace lorsqu'il est utilisé comme un caractère. En utilisant le rend très clair où de tels espaces apparaissent dans le texte.

5
répondu Alireza 2018-10-02 12:57:52

La réponse exacte dépend du contexte. En général, ces caractères ne doivent pas être présents ( HTML 5.2 §3.2.4.2.5 ):

les noeuds de texte et les valeurs d'attribut doivent être constitués de caractères Unicode, ne doivent pas contenir de caractères U+0000, ne doivent pas contenir de caractères Unicode non définis en permanence (noncharacters) et ne doivent pas contenir de caractères de contrôle autres que des caractères spatiaux. Cette spécification inclut des contraintes supplémentaires sur la valeur exacte des noeuds de texte et des valeurs d'attribut en fonction de leur contexte précis.

pour les éléments en HTML, les contraintes du modèle de contenu de texte dépendent également du type d'élément. Par exemple, un " < " à l'intérieur d'un élément textarea n'a pas besoin d'être échappé en HTML parce que textarea est un élément de texte brut escapable.

ces restrictions sont dispersées dans la spécification. Par exemple, valeurs d'attribut ( §8.1.2.3 ) ne doit pas contenir de ampersand ambigu et être soit (i) vide", (ii) entre guillemets (et ne doit donc pas contenir le caractère U+0027 APOSTROPHE ' ), (iii) entre guillemets (ne doit pas contenir le caractère U+0022 guillemet " ), ou (IV) non cité - avec les restrictions suivantes:

... ne doit pas contenir de caractères d'espace littéral, de caractères de guillemets U+0022 ( "), de caractères apostrophes U+0027 ( "), U+003D est égal à des caractères de signe ( = ), U+003C est inférieur à des caractères de signe ( < ), U+003E est supérieur à des caractères de signe ( > ), ou U+0060 à des caractères D'ACCENT GRAVE ( ' ), et ne doit pas être la chaîne vide.

1
répondu Andrey 2018-04-11 02:27:50