Sont-ils les mêmes que XML, peut-être plus l'espace un (
)?
J'ai trouvé d'énormes listes de caractères d'échappement HTML mais je ne pense pas qu'ils doivent être échappés. Je veux savoir ce qui doit être échappé.
Sont-ils les mêmes que XML, peut-être plus l'espace un (
)?
J'ai trouvé d'énormes listes de caractères d'échappement HTML mais je ne pense pas qu'ils doivent être échappés. Je veux savoir ce qui doit être échappé.
Si vous insérez du contenu textuel dans votre document à un emplacement où le contenu textuel est attendu 1 , vous n'avez généralement besoin que d'échapper les mêmes caractères que vous le feriez en XML . À l'intérieur d'un élément, cela inclut simplement l'esperluette d'échappement de l'entité &
et le délimiteur d'élément signe inférieur à et supérieur à <
>
:
& becomes &
< becomes <
> becomes >
À l'intérieur des valeurs d'attribut, vous devez également échapper le caractère de guillemet que vous utilisez:
" becomes "
' becomes '
Dans certains cas, il peut être prudent de ne pas échapper à certains de ces personnages, mais je vous encourage à vous échapper des cinq dans tous les cas pour réduire le risque de faire une erreur.
Si l'encodage de votre document ne prend pas en charge tous les caractères que vous utilisez, par exemple si vous essayez d'utiliser des emoji dans un document encodé en ASCII, vous devez également les échapper. De nos jours, la plupart des documents sont codés à l'aide du codage UTF-8 entièrement compatible Unicode, où cela ne sera pas nécessaire.
En général, vous ne devez pas échapper aux espaces comme
.
n'est pas un espace normal, c'est un espace insécable . Vous pouvez les utiliser à la place des espaces normaux pour empêcher l'insertion d'un saut de ligne entre deux mots ou pour insérer de l'espace supplémentaire sans qu'il soit automatiquement réduit, mais c'est généralement un cas rare. Ne faites cela que si vous avez une contrainte de conception qui l'exige.
1 Par "un emplacement où du contenu textuel est attendu", je veux dire à l'intérieur d'un élément ou d'une valeur d'attribut entre guillemets où les règles d'analyse normales s'appliquent. Par exemple: <p>HERE</p>
ou <p title="HERE">...</p>
. Ce que j'ai écrit ci - dessus ne s'applique pas au contenu qui a des règles ou une signification d'analyse spéciales, telles que l'intérieur d'un script ou d'une balise de style, ou en tant que nom d'élément ou d'attribut. Par exemple: <NOT-HERE>...</NOT-HERE>
, <script>NOT-HERE</script>
, <style>NOT-HERE</script>
ou <p NOT-HERE="...">...</p>
.
Dans ces contextes, les règles sont plus compliquées et il est beaucoup plus facile d'introduire une vulnérabilité de sécurité. Je vous décourage fortement de ne jamais insérer de contenu dynamique dans aucun de ces emplacements. J'ai vu des équipes de développeurs compétents soucieux de la sécurité introduire des vulnérabilités en supposant qu'ils avaient encodé ces valeurs correctement, mais sans un cas limite. Il existe généralement une alternative plus sûre, comme mettre la valeur dynamique dans un attribut puis la gérer avec JavaScript.
Si vous devez le faire, veuillez lire les règles de prévention XSS du projet de sécurité des applications Web ouvertes pour vous aider à comprendre certaines des préoccupations que vous devrez garder à l'esprit.
<p onclick="NOT-HERE">...</p>
et<p style="NOT-HERE">...</p>
.Cela dépend du contexte. Quelques contextes possibles en HTML:
Consultez la feuille de triche sur la prévention des scripts intersites de l'OWASP , en particulier le document « Pourquoi ne puis-je pas simplement coder des données non approuvées par une entité HTML? sections " Et " Règles de prévention XSS ". Cependant, il est préférable de lire l'intégralité du document.
la source
Fondamentalement, il y a trois caractères principaux qui doivent toujours être échappés dans vos fichiers HTML et XML, afin qu'ils n'interagissent pas avec le reste des balises, donc comme vous vous en doutez probablement, deux d'entre eux seront les wrappers de syntaxe, qui sont < >, ils sont listés ci-dessous:
Nous pouvons également utiliser des guillemets doubles (") as" et des guillemets simples (') as & apos
Évitez de mettre du contenu dynamique dans
<script>
et<style>
. Ces règles ne sont pas applicables pour eux. Par exemple, si vous devez inclure JSON dans a, remplacez <par \ x3c, le caractère U + 2028 par \ u2028 et U + 2029 avec \ u2029 après la sérialisation JSON.)Caractères d'échappement HTML: Liste complète: http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php
Vous devez donc échapper <, ou & lorsqu'il est suivi de tout ce qui pourrait commencer une référence de caractère. De plus, la règle sur les esperluettes est la seule règle de ce type pour les attributs entre guillemets, car le guillemet correspondant est la seule chose qui en terminera un. Mais si vous ne souhaitez pas y mettre fin à la valeur d'attribut, échappez au guillemet.
la source
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 ):
Ces restrictions sont dispersées dans la spécification. Par exemple, les valeurs d'attribut ( §8.1.2.3 ) ne doivent pas contenir d' esperluette ambiguë et être soit (i) vide, (ii) entre guillemets simples (et ne doivent donc pas contenir le caractère U + 0027 APOSTROPHE
'
), (iii) entre guillemets doubles ( ne doit pas contenir le caractère U + 0022 QUOTATION MARK"
) ou (iv) sans guillemets - avec les restrictions suivantes:la source