0Pricing
React Academy · Aula

XSS no React: dangerouslySetInnerHTML e scripts de terceiros

Entenda como a conversão de caracteres padrão do React impede XSS, quando dangerouslySetInnerHTML é perigoso e como scripts de terceiros introduzem riscos.

XSS no React: dangerouslySetInnerHTML e scripts de terceiros é uma aula grátis de React Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.

Proteção Integrada contra XSS do React

O React escapa automaticamente todos os valores renderizados por JSX antes de inseri-los no DOM. Quando você escreve {userInput} em JSX, o React faz o equivalente a atribuir um valor a textContent — o valor é tratado como texto, nunca como HTML. Por padrão, isso impede a maioria dos ataques XSS em aplicações React.

O que dangerouslySetInnerHTML Faz

dangerouslySetInnerHTML={{ __html: htmlString }} é o recurso de exceção do React que ignora o escape automático. O nome é intencionalmente alarmante: ele informa que você está assumindo a responsabilidade pela segurança da string HTML. O React define innerHTML diretamente, executando qualquer HTML, incluindo scripts e manipuladores de eventos.

Usos Legítimos

Você realmente precisa de dangerouslySetInnerHTML ao renderizar HTML proveniente de um editor de texto formatado, como TipTap ou Quill, de um CMS que armazena HTML ou de um conversor de Markdown para HTML. Essas fontes produzem marcação HTML real, que precisa ser renderizada como HTML, e não como texto escapado.

O Vetor de Ataque

Se a string HTML contiver <script>stealCookies()</script> ou <img src=x onerror="stealData()">, defini-la como innerHTML executará o código do atacante. Qualquer conteúdo fornecido pelo usuário que seja passado diretamente para dangerouslySetInnerHTML sem sanitização é uma vulnerabilidade XSS crítica.

DOMPurify: o Sanitizador Padrão

DOMPurify é o sanitizador de HTML padrão do setor para navegadores. Ele analisa a string HTML em um contexto isolado, remove elementos e atributos perigosos (tags de script, manipuladores de eventos e URLs javascript:) e retorna uma string HTML segura. Uso: DOMPurify.sanitize(dirtyHtml) antes de passá-la para dangerouslySetInnerHTML.

Riscos de Scripts de Terceiros

Scripts de terceiros (análises, widgets de bate-papo e redes de anúncios) são executados com as mesmas permissões que o JavaScript da sua aplicação. Um script de terceiros comprometido ou malicioso pode ler document.cookie, acessar localStorage, ler campos de formulários e fazer solicitações a servidores externos — tudo isso sem qualquer indicação para o usuário.

Política de Segurança de Conteúdo como Camada de Defesa

A Política de Segurança de Conteúdo é um cabeçalho HTTP que declara quais scripts têm permissão para ser executados. Mesmo que uma carga XSS seja injetada no DOM, uma CSP configurada corretamente pode bloquear sua execução, restringindo scripts embutidos e permitindo somente origens de scripts autorizadas. A CSP é a segunda linha de defesa depois da sanitização da entrada.

Ataques à Cadeia de Suprimentos via npm

Os pacotes npm são um vetor real de ataques XSS. Uma dependência pode incluir código malicioso que extrai variáveis de ambiente ou dados do usuário. O incidente de node-ipc em 2022 e o comprometimento de ua-parser-js em 2021 demonstraram que pacotes amplamente utilizados podem ser assumidos e adulterados. Audite as dependências com npm audit e use arquivos de bloqueio.

O que os Atacantes Fazem com XSS

Um ataque XSS bem-sucedido permite que um atacante roube o token JWT do usuário em sessionStorage (enviando-o a um servidor controlado pelo atacante), execute ações como o usuário autenticado (chamadas de API usando a sessão do usuário), modifique o DOM para exibir conteúdo de phishing ou registre cada tecla pressionada pelo usuário na aplicação.

API Trusted Types

A API Trusted Types do navegador exige que todos os destinos do DOM (innerHTML, eval, script.src) recebam objetos tipados especiais em vez de strings brutas. Isso impede que cargas XSS baseadas em strings cheguem ao DOM no nível da plataforma. O React está avançando rumo à compatibilidade com Trusted Types, e a CSP pode impor seu uso.

Padrões Seguros para Conteúdo de CMS

O padrão seguro para renderizar HTML de um CMS é: buscar o HTML, passá-lo por DOMPurify.sanitize() com uma lista de permissões de tags e atributos seguros e, em seguida, renderizá-lo com dangerouslySetInnerHTML={{ __html: cleanHtml }}. Nunca ignore a etapa de sanitização, mesmo que você confie no CMS, pois o próprio banco de dados do CMS pode ser comprometido.

Finalidade do DOMPurify

O que o DOMPurify faz quando você chama DOMPurify.sanitize(htmlString)?

Recapitulação da Lição

O React escapa automaticamente os valores de JSX, impedindo a maioria dos ataques XSS. dangerouslySetInnerHTML ignora essa proteção para permitir a renderização legítima de HTML — sempre sanitize a entrada primeiro com DOMPurify. Scripts de terceiros e pacotes npm comprometidos são vetores de XSS na cadeia de suprimentos. A Política de Segurança de Conteúdo fornece uma segunda camada de defesa. Um ataque XSS bem-sucedido permite roubo de tokens, personificação e phishing.

Perguntas Frequentes

A aula “XSS no React: dangerouslySetInnerHTML e scripts de terceiros” é grátis?

Sim — o texto completo de “XSS no React: dangerouslySetInnerHTML e scripts de terceiros” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.

O que vou aprender em “XSS no React: dangerouslySetInnerHTML e scripts de terceiros”?

Entenda como a conversão de caracteres padrão do React impede XSS, quando dangerouslySetInnerHTML é perigoso e como scripts de terceiros introduzem riscos. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar React Academy?

Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “XSS no React: dangerouslySetInnerHTML e scripts de terceiros”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de React Academy?

Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. XSS no React: dangerouslySetInnerHTML e scripts de terceiros
  2. Proteção contra CSRF em configurações de React e API
  3. Política de segurança de conteúdo para aplicações React
  4. Gerenciamento de segredos e variáveis de ambiente
← Voltar para React Academy