Eles são iguais ao XML, talvez mais o espaço (
)?
Eu encontrei algumas listas enormes de caracteres de escape HTML, mas não acho que eles devam ser escapados. Eu quero saber o que precisa ser escapado.
Eles são iguais ao XML, talvez mais o espaço (
)?
Eu encontrei algumas listas enormes de caracteres de escape HTML, mas não acho que eles devam ser escapados. Eu quero saber o que precisa ser escapado.
Se você estiver inserindo conteúdo de texto em seu documento em um local em que o conteúdo de texto é esperado 1 , normalmente você só precisa escapar dos mesmos caracteres que faria em XML . Dentro de um elemento, isso inclui apenas o &
e comercial de escape da entidade e o delimitador de elemento menor que e maior que sinais <
>
:
& becomes &
< becomes <
> becomes >
Dentro dos valores dos atributos, você também deve escapar do caractere de citação que está usando:
" becomes "
' becomes '
Em alguns casos, pode ser seguro pular a fuga de alguns desses personagens, mas encorajo você a escapar dos cinco em todos os casos para reduzir a chance de cometer um erro.
Se a codificação do documento não suportar todos os caracteres que você estiver usando, como se você estiver tentando usar emoji em um documento codificado em ASCII, também precisará escapar deles. Atualmente, a maioria dos documentos é codificada usando a codificação UTF-8 totalmente compatível com Unicode, onde isso não será necessário.
Em geral, você não deve escapar de espaços como
.
não é um espaço normal, é um espaço ininterrupto . Você pode usá-los em vez de espaços normais para impedir que uma quebra de linha seja inserida entre duas palavras ou para inserir espaço extra sem que ela seja recolhida automaticamente, mas esse geralmente é um caso raro. Não faça isso a menos que você tenha uma restrição de design que exija.
1 Por "um local onde o conteúdo do texto é esperado", quero dizer dentro de um elemento ou valor de atributo citado, onde as regras de análise normais se aplicam. Por exemplo: <p>HERE</p>
ou <p title="HERE">...</p>
. O que eu escrevi acima não se aplica a conteúdo que tenha regras ou significado especiais de análise, como dentro de uma tag de script ou estilo, ou como um nome de elemento ou atributo. Por exemplo: <NOT-HERE>...</NOT-HERE>
, <script>NOT-HERE</script>
, <style>NOT-HERE</script>
, ou <p NOT-HERE="...">...</p>
.
Nesses contextos, as regras são mais complicadas e é muito mais fácil introduzir uma vulnerabilidade de segurança. Eu o desencorajo a inserir conteúdo dinâmico em qualquer um desses locais. Vi equipes de desenvolvedores competentes em segurança introduzirem vulnerabilidades assumindo que eles haviam codificado esses valores corretamente, mas perdendo um caso crítico. Geralmente, existe uma alternativa mais segura, como colocar o valor dinâmico em um atributo e manipulá-lo com JavaScript.
Se necessário, leia as Regras de prevenção de XSS do Open Web Application Security Project para ajudar a entender algumas das preocupações que você precisará ter em mente.
<p onclick="NOT-HERE">...</p>
e<p style="NOT-HERE">...</p>
.Depende do contexto. Alguns contextos possíveis em HTML:
Consulte a Folha de Dicas de Prevenção de Script Entre Sites da OWASP , especialmente as seções " Por que não posso apenas a entidade HTML codificar dados não confiáveis? " E " Regras de prevenção de XSS ". No entanto, é melhor ler o documento inteiro.
fonte
Basicamente, existem três caracteres principais que sempre devem ser escapados em seus arquivos HTML e XML, para que eles não interajam com o restante das marcações; portanto, como você provavelmente espera, dois deles serão os wrappers de sintaxe, que são < >, eles estão listados abaixo:
Também podemos usar aspas duplas (") como" e aspas simples (') como & apos
Evite inserir conteúdo dinâmico
<script>
e<style>
. Essas regras não se aplicam a eles. Por exemplo, se você precisar incluir JSON em a, substitua <por \ x3c, o caractere U + 2028 por \ u2028 e U + 2029 por \ u2029 após a serialização JSON.)Caracteres de escape em HTML: Lista completa: http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php
Portanto, você precisa escapar de <ou & quando for seguido por qualquer coisa que possa iniciar uma referência de personagem. Além disso, a regra sobre e comercial é a única regra para atributos entre aspas, pois as aspas correspondentes são a única coisa que terminará uma. Mas se você não deseja finalizar o valor do atributo, escape as aspas.
fonte
A resposta exata depende do contexto. Em geral, esses caracteres não devem estar presentes ( HTML 5.2 §3.2.4.2.5 ):
Essas restrições estão espalhadas pela especificação. Por exemplo, valores de atributo ( §8.1.2.3 ) não devem conter um e comercial ambíguo e devem estar (i) vazios, (ii) entre aspas simples (e, portanto, não devem conter o caractere APOSTROPHE U + 0027
'
), (iii) entre aspas duplas ( não deve conter o caractere U + 0022 QUOTATION MARK"
) ou (iv) sem aspas - com as seguintes restrições:fonte