HyperText Markup Language, ou HTML, é o idioma principal para páginas da web na Internet. Inclui suporte para uma série de outras linguagens que adicionam funcionalidade extra e estilo, como JavaScript e CSS. Todas essas linguagens são baseadas em texto com alguns caracteres significativos usados para separar strings literais que devem ser impressas no navegador e o código que deve ser interpretado e executado.
Este design tem alguns problemas, porém, eles se tornam óbvios quando você deseja imprimir um dos caracteres significativos para o navegador. Os melhores exemplos de caracteres a serem usados são os símbolos “menor que” e “maior que”. Respectivamente, esses símbolos são usados para abrir e fechar segmentos de código em HTML. O método correto de imprimir esses caracteres na tela com segurança é usar entidades HTML.
Entidades HTML e segurança
Graças a esses caracteres terem um significado especial, você deve ter muito cuidado para se certificar de substituí-los pela versão da entidade HTML se quiser que sejam impressos no navegador. Infelizmente, muitos desenvolvedores da web esquecem que os usuários podem enviar entradas para muitos sites. Se essa entrada do usuário incluir caracteres significativos e eles não forem substituídos por entidades HTML, em um processo chamado higienização, o site terá uma vulnerabilidade de Cross-Site Scripting (XSS).
Dica: Não tente enviar caracteres especiais para sites na tentativa de encontrar vulnerabilidades XSS. Fazer isso é tecnicamente hackear e é um crime, a menos que você tenha permissão do proprietário do site.
Como as entidades HTML funcionam (e às vezes não)
As entidades HTML funcionam porque o navegador sabe exibi-las como o caractere especial relevante e não tratá-las como um caractere especial. Todas as entidades HTML começam com um E comercial “&” e terminam com um ponto e vírgula “;”. A maioria dos caracteres é identificada por um número de entidade, embora alguns caracteres especiais também tenham um nome abreviado. Por exemplo, “&”, “” têm os números da entidade “&”, “”, bem como os nomes das entidades “&”, “” respectivamente. O navegador sabe que essas strings significam que ele precisa exibir os caracteres relevantes.
Dica: uma lista completa de nomes de entidades de personagens pode ser encontrada aqui, embora o suporte ao nome da entidade varie de acordo com o navegador.
Na maioria dos casos, os usuários só devem ver os caracteres que as entidades HTML representam. É possível, no entanto, ver caracteres codificados, comumente e comercial “&”, por meio de um processo denominado “Codificação dupla”. Isso acontece quando o caractere "e" comercial aparece em sua própria versão codificada. A codificação dupla geralmente acontece quando a entrada é codificada corretamente, conforme é enviada, no entanto, quando está sendo enviada, ela é limpa novamente. Isso resulta no e comercial no início do “&” sendo codificado uma segunda vez e aparecendo como “&”, o navegador então interpreta isso corretamente como uma string que deve ser impressa como “&”, tendo decodificado a entidade HTML e ignorado o entidade.