1
resposta

Perigo ao utilizar .innerHtml no javascript!

Ola amigo desenvolvedor!
Quando você utiliza .innerHTML para manipular o conteúdo de um elemento HTML, o que acontece é que qualquer código HTML (inclusive tags de <script>) presente nesse conteúdo é interpretado e executado pelo navegador. Isso pode ser extremamente perigoso, pois permite que scripts maliciosos sejam injetados e executados no contexto da sua página, o que pode resultar em ataques como cross-site scripting (XSS).
Aqui está o que acontece, de forma mais detalhada:

  1. Com innerHTML:
    • Quando você usa .innerHTML para atribuir um valor a um elemento, o navegador interpreta o conteúdo e executa qualquer JavaScript incluído. Se um usuário mal-intencionado inserir código JavaScript, isso pode ser executado dentro do contexto da página.
    • Exemplo:
      document.getElementById("element").innerHTML = "<img src='x' onerror='alert(\"XSS attack\")'>";
      
      Se você não tiver cuidados, o código JavaScript do tipo onerror será executado, o que pode resultar em ações maliciosas.
  2. Com textContent:
    • A propriedade .textContent apenas insere texto puro no elemento, sem interpretar HTML. Ou seja, qualquer tentativa de incluir uma tag HTML ou script será tratada como texto comum, sem ser executada.
    • Exemplo:
      document.getElementById("element").textContent = "<img src='x' onerror='alert(\"XSS attack\")'>";
      
      Nesse caso, o conteúdo será exibido exatamente como texto:
      <img src='x' onerror='alert("XSS attack")'>
      
      Ou seja, o código não é executado.

Resumo da diferença:

  • innerHTML: Executa o código HTML dentro do conteúdo, o que pode permitir a execução de scripts maliciosos.
  • textContent: Insere o texto puro sem permitir que scripts ou HTML sejam executados, tornando-o mais seguro contra injeção de código malicioso.

Quando usar .textContent?

  • Quando você estiver lidando com conteúdo fornecido pelo usuário ou de fontes externas, sempre utilize .textContent para evitar a execução de código malicioso.
    Se precisar manipular conteúdo HTML (sem que haja risco de injeção de scripts), prefira usar métodos que escapem as entradas de maneira segura, como textContent, ou utilize funções específicas de manipulação DOM, como createElement e appendChild, para garantir mais segurança.
    Em resumo:
    Se o objetivo é evitar injeção de scripts maliciosos e garantir que o conteúdo inserido seja tratado como texto puro, sempre prefira usar .textContent ao invés de .innerHTML.
    Um código seguro sempre é prioridade.
    Bons estudos.

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Olá Ronaldo! Tudo bem?

Você levantou um ponto muito importante sobre o uso de .innerHTML e os riscos associados, especialmente em relação a ataques de cross-site scripting (XSS). É sempre essencial ter cuidado ao manipular o DOM, principalmente quando o conteúdo vem de fontes externas ou do usuário.

Continue participativo assim na comunidade e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.