
DOMPurify v3.4.13
DOMPurify - un sanitizer XSS DOM-only, super veloce, ultra-tollerante per HTML, MathML e SVG. DOMPurify funziona con impostazioni predefinite sicure, ma offre molta configurabilità e hook. Demo:
DOMPurify
DOMPurify è un sanitizer XSS per HTML, MathML e SVG, basato esclusivamente sul DOM, super veloce e estremamente tollerante.
È anche molto semplice da usare e con cui iniziare. DOMPurify è stato avviato nel febbraio 2014 e, nel frattempo, ha raggiunto la versione v3.4.17.
DOMPurify funziona come JavaScript e opera in tutti i browser moderni (Safari (10+), Opera (15+), Edge, Firefox e Chrome - così come quasi qualsiasi altro browser basato su Blink, Gecko o WebKit). Non si rompe su MSIE o altri browser legacy. Semplicemente non fa nulla.
Nota che DOMPurify v2.5.9 è l'ultima versione che supporta MSIE. Per aggiornamenti di sicurezza importanti compatibili con MSIE, utilizza il ramo 2.x.
I nostri test automatizzati coprono 9 combinazioni browser/sistema operativo sui motori attuali (Chromium, Firefox e WebKit su Ubuntu, macOS e Windows) a ogni push, e una matrice separata riesegue la suite su snapshot di motori più vecchi (fino a circa Chromium 110, Firefox 108 e WebKit 16.4, circa tre anni fa) in modo che anche le regressioni sui browser obsoleti vengano rilevate. Eseguiamo anche Node.js v20, v22, v24, v25 e v26 con DOMPurify su jsdom. Si sa che anche versioni precedenti di Node funzionano, ma ehi... nessuna garanzia.
DOMPurify è scritto da esperti di sicurezza con una vasta esperienza in attacchi web e XSS. Non temere. Per maggiori dettagli, leggi anche i nostri Obiettivi di Sicurezza e Modello di Minaccia. Per favore, leggilo. Tipo, davvero. E se ti piacciono i dettagli cruenti, la pagina Classi di Attacco e Storia dei Bypass cataloga i trucchi di mutazione del parser, namespace, clobbering e template contro cui DOMPurify si difende.
Il progetto DOMPurify ha ispirato la creazione della HTML Sanitizer API, che è già disponibile in molti browser. La stessa capacità è ora in fase di standardizzazione direttamente nella specifica WHATWG HTML.
Indice
- Cosa fa?
- Come si usa?
- C'è una demo?
- Cosa succede se trovo un bug di sicurezza?
- Qualche esempio di sanitizzazione, per favore?
- Cosa è supportato?
- E i browser legacy come Internet Explorer?
- E DOMPurify e i Trusted Types?
- Posso configurare DOMPurify?
- Configurazione persistente
- Hook
- Configurazione rimossa
- Integrazione continua
- Mailing list di sicurezza
- Chi ha contribuito?
Cosa fa?
DOMPurify sanitizza l'HTML e previene gli attacchi XSS. Puoi fornire a DOMPurify, ad esempio, una stringa piena di HTML sporco e restituirà una stringa (a meno che non sia configurato diversamente) con HTML pulito. DOMPurify rimuoverà tutto ciò che contiene HTML pericoloso, prevenendo così attacchi XSS e altre brutture. È anche dannatamente veloce. Utilizziamo le tecnologie fornite dal browser e le trasformiamo in un filtro XSS. Più veloce è il tuo browser, più veloce sarà DOMPurify.
Come si usa?
È facile. Basta includere DOMPurify nel tuo sito web.
Usando la versione non minificata (source-map disponibile)
<script type="text/javascript" src="dist/purify.js"></script>
Utilizzo della versione di produzione minificata e testata (source-map disponibile)
<script type="text/javascript" src="dist/purify.min.js"></script>
Successivamente puoi sanificare le stringhe eseguendo il seguente codice:
const clean = DOMPurify.sanitize(dirty);
O forse questo, se ami lavorare con Angular o simili:
import DOMPurify from 'dompurify';
const clean = DOMPurify.sanitize('<b>hello there</b>');
L'HTML risultante può essere scritto in un elemento DOM usando innerHTML o nel DOM usando document.write(). Questo dipende interamente da te.
Nota che per impostazione predefinita consentiamo HTML, SVG e MathML. Se hai bisogno solo di HTML, che potrebbe essere un caso d'uso molto comune, puoi configurarlo facilmente anche tu:
const clean = DOMPurify.sanitize(dirty, { USE_PROFILES: { html: true } });
C'è qualche potenziale rischio nascosto?
Bene, tieni presente che se prima sanitizzi l'HTML e poi lo modifichi successivamente, potresti facilmente annullare gli effetti della sanitizzazione. Se passi il markup sanitizzato a un'altra libreria dopo la sanitizzazione, assicurati che la libreria non interferisca con l'HTML di propria iniziativa. Consulta Security Goals & Threat Model per ricette di utilizzo sicuro e per i tag/attributi su cui riflettere due volte, e Attack Classes & Bypass History per capire perché la post-elaborazione e il cambio di contesto del markup vanificano la sanitizzazione.