
DOMPurify v3.4.13
DOMPurify - um sanitizador de XSS somente DOM, super-rápido e supertolerante para HTML, MathML e SVG. DOMPurify funciona com um padrão seguro, mas oferece muita configurabilidade e hooks. Demonstração:
DOMPurify
DOMPurify é um sanitizador XSS exclusivo para DOM, super-rápido e extremamente tolerante, para HTML, MathML e SVG.
Também é muito simples de usar e começar. O DOMPurify foi iniciado em fevereiro de 2014 e, entretanto, chegou à versão v3.4.17.
O DOMPurify é executado como JavaScript e funciona em todos os navegadores modernos (Safari (10+), Opera (15+), Edge, Firefox e Chrome - assim como quase qualquer outro que use Blink, Gecko ou WebKit). Ele não quebra no MSIE ou em outros navegadores legados. Simplesmente não faz nada.
Observe que o DOMPurify v2.5.9 é a versão mais recente com suporte ao MSIE. Para atualizações de segurança importantes compatíveis com o MSIE, use o branch 2.x.
Nossos testes automatizados cobrem 9 combinações de navegador/SO nos motores atuais (Chromium, Firefox e WebKit em Ubuntu, macOS e Windows) a cada push, e uma matriz separada reexecuta a suíte em snapshots de motores mais antigos (até aproximadamente Chromium 110, Firefox 108 e WebKit 16.4, cerca de três anos atrás) para que regressões em navegadores desatualizados também sejam detectadas. Também executamos Node.js v20, v22, v24, v25 e v26 com DOMPurify no jsdom. Versões mais antigas do Node também são conhecidas por funcionar, mas, bem... sem garantias.
O DOMPurify é escrito por pessoas de segurança que têm vasta experiência em ataques web e XSS. Não tema. Para mais detalhes, leia também sobre nossos Objetivos de Segurança e Modelo de Ameaças. Por favor, leia. Sério mesmo. E se você gosta dos detalhes sangrentos, a página Classes de Ataque e Histórico de Bypass cataloga os truques de mutação de parser, namespace, clobbering e template contra os quais o DOMPurify se defende.
O projeto DOMPurify inspirou a criação da HTML Sanitizer API, que já está sendo distribuída em muitos navegadores. A mesma capacidade agora está sendo padronizada diretamente na especificação WHATWG HTML.
Índice
- O que ele faz?
- Como eu o uso?
- Existe uma demonstração?
- E se eu encontrar um bug de segurança?
- Alguns exemplos de sanitização, por favor?
- O que é suportado?
- E quanto a navegadores legados como o Internet Explorer?
- E quanto ao DOMPurify e Trusted Types?
- Posso configurar o DOMPurify?
- Configuração Persistente
- Hooks
- Configuração Removida
- Integração Contínua
- Lista de Discussão de Segurança
- Quem contribuiu?
O que ele faz?
O DOMPurify sanitiza HTML e previne ataques XSS. Você pode fornecer ao DOMPurify, por exemplo, uma string cheia de HTML sujo e ele retornará uma string (a menos que configurado de outra forma) com HTML limpo. O DOMPurify removerá tudo o que contiver HTML perigoso e, assim, prevenirá ataques XSS e outras ameaças. Também é incrivelmente rápido. Usamos as tecnologias que o navegador fornece e as transformamos em um filtro XSS. Quanto mais rápido for o seu navegador, mais rápido será o DOMPurify.
Como eu o uso?
É fácil. Basta incluir o DOMPurify no seu site.
Usando a versão não minificada (source-map disponível)
<script type="text/javascript" src="dist/purify.js"></script>
Usando a versão de produção minificada e testada (source-map disponível)
<script type="text/javascript" src="dist/purify.min.js"></script>
Em seguida, você pode sanitizar strings executando o seguinte código:
const clean = DOMPurify.sanitize(dirty);
Ou talvez isto, se você adora trabalhar com Angular ou similar:
import DOMPurify from 'dompurify';
const clean = DOMPurify.sanitize('<b>hello there</b>');
O HTML resultante pode ser escrito em um elemento DOM usando innerHTML ou no DOM usando document.write(). Isso depende inteiramente de você.
Observe que, por padrão, permitimos HTML, SVG e MathML. Se você precisa apenas de HTML, o que pode ser um caso de uso muito comum, você também pode configurar isso facilmente:
const clean = DOMPurify.sanitize(dirty, { USE_PROFILES: { html: true } });
Existe algum potencial de foot-gun?
Bem, observe que, se você primeiro sanitizar o HTML e depois modificá-lo posteriormente, você pode facilmente anular os efeitos da sanitização. Se você alimentar a marcação sanitizada com outra biblioteca após a sanitização, certifique-se de que a biblioteca não mexe no HTML por conta própria. Consulte Security Goals & Threat Model para receitas de uso seguro e as tags/atributos que merecem uma segunda reflexão, e Attack Classes & Bypass History para entender por que o pós-processamento e a alteração do contexto da marcação derrotam a sanitização.