Back

Por que o <script> não é executado? (Entidades HTML e defesa XSS)

Se você digitar <script>alert('hacked');</script> em uma caixa de comentários em um site, o que acontece?

Na maioria dos sites seguros, o script não é executado; em vez disso, a string de texto é exibida exatamente como digitada.

Os navegadores normalmente interpretam < como o início de uma tag. Então, como eles sabem exibi-lo como texto em vez de executá-lo como código?

O segredo está nas Entidades HTML.

1. O Dilema dos Caracteres Reservados

Em HTML, caracteres como <, >, & e " têm significados especiais. Estes são chamados de Caracteres Reservados.

Se você quiser escrever a equação "3 < 5" em seu conteúdo e digitá-la como está, o navegador pode ficar confuso, tentando interpretar o que segue < como uma tag.

Portanto, precisamos de um código especial para representar esses caracteres reservados "literalmente".

2. Entidades HTML Comuns

As Entidades HTML começam com & e terminam com ;.

  • < (Menor que) -> &lt;
  • > (Maior que) -> &gt;
  • & (E comercial) -> &amp;
  • " (Aspas duplas) -> &quot;
  • ' (Aspas simples) -> &#39; (ou &apos;)
  • Espaço -> &nbsp; (Espaço inquebrável)

Quando você vê < na tela, o código-fonte HTML real é provavelmente &lt;.

3. Defesa contra XSS (Cross Site Scripting)

As Entidades HTML são cruciais para a segurança.

XSS é um ataque onde um hacker injeta scripts maliciosos em um site para roubar cookies de usuário ou realizar ações prejudiciais.

No entanto, se o servidor converter (escapar) < para &lt; e > para &gt; ao salvar ou exibir a entrada do usuário, o que acontece?

O navegador vê &lt;script&gt; e decide: "Isso é apenas texto, não uma tag", e o renderiza como texto sem executar o script. Esta é a defesa mais fundamental e poderosa contra XSS.

Conclusão

Frameworks frontend modernos como React ou Vue escapam automaticamente os dados por padrão ao renderizar.

No entanto, ao usar recursos como dangerouslySetInnerHTML, essa defesa automática é desativada. Nesses casos, você deve garantir que a conversão de entidade HTML tenha sido aplicada.

Uma simples conversão de caracteres atua como um escudo protegendo seu site de hackers.

TechHTMLSecurityWeb

Explore ferramentas relacionadas

Experimente estas ferramentas gratuitas do Pockit