
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 é um sanitizador XSS para HTML, MathML e SVG, exclusivo para DOM, super-rápido e extremamente tolerante.
Também é muito simples de usar e começar. O DOMPurify foi iniciado em fevereiro de 2014 e, entretanto, chegou à versão v3.4.15.
O DOMPurify é executado como JavaScript e funciona em todos os navegadores modernos (Safari (10+), Opera (15+), Edge, Firefox e Chrome - assim como praticamente qualquer outro que use Blink, Gecko ou WebKit). 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 mecanismos atuais (Chromium, Firefox e WebKit em Ubuntu, macOS e Windows) a cada push, e uma matriz separada reexecuta a suíte em snapshots de mecanismos 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.
O DOMPurify sanitiza HTML e previne ataques XSS. Você pode alimentar o DOMPurify com, 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 que contenha HTML perigoso e, assim, prevenirá ataques XSS e outras coisas desagradáveis. Também é extremamente rápido. Usamos as tecnologias que o navegador fornece e as transformamos em um filtro XSS. Quanto mais rápido seu navegador, mais rápido o DOMPurify será.
É fácil. Basta incluir o DOMPurify no seu site.
### Usando a versão de produção minificada e testada (source-map disponível)```html
<script type="text/javascript" src="dist/purify.min.js"></script>
Depois, você pode sanitizar strings executando o seguinte código:```js const clean = DOMPurify.sanitize(dirty);
Ou talvez isto, se você adora trabalhar com Angular ou similar:```js
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:```js
const clean = DOMPurify.sanitize(dirty, { USE_PROFILES: { html: true } });
### Existe algum potencial de armadilha?
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 para outra biblioteca _após_ a sanitização, certifique-se de que a biblioteca não mexa no HTML por conta própria. Consulte [Security Goals & Threat Model](https://github.com/cure53/DOMPurify/wiki/Security-Goals-&-Threat-Model) para receitas de uso seguro e as tags/atributos que merecem uma segunda reflexão, e [Attack Classes & Bypass History](https://github.com/cure53/DOMPurify/wiki/Attack-Classes-&-Bypass-History) para entender por que o pós-processamento e a alteração do contexto da marcação anulam a sanitização.
### Ok, faz sentido, vamos em frente
Depois de sanitizar sua marcação, você também pode dar uma olhada na propriedade `DOMPurify.removed` e descobrir quais elementos e atributos foram descartados. Por favor, **não use** esta propriedade para tomar decisões críticas de segurança. Isto é apenas um pequeno auxiliar para mentes curiosas.
### Executando o DOMPurify no servidor
Tecnicamente, o DOMPurify também funciona do lado do servidor com Node.js. Nosso suporte se esforça para seguir o [ciclo de lançamento do Node.js](https://nodejs.org/en/about/previous-releases).
Executar o DOMPurify no servidor requer que um DOM esteja presente, o que provavelmente não é surpresa. Normalmente, o [jsdom](https://github.com/jsdom/jsdom) é a ferramenta de escolha e nós **recomendamos fortemente** usar a versão mais recente do _jsdom_.