
DOMPurify v3.4.13
DOMPurify - un sanitiseur XSS uniquement DOM, ultra-rapide et ultra-tolérant, pour HTML, MathML et SVG. DOMPurify fonctionne avec une configuration sécurisée par défaut, mais offre de nombreuses options de configuration et des hooks. Démo :
DOMPurify
DOMPurify est un assainisseur XSS dédié au DOM, ultra-rapide et extrêmement tolérant, pour HTML, MathML et SVG.
Il est également très simple à utiliser et à prendre en main. DOMPurify a été lancé en février 2014 et a, entre-temps, atteint la version v3.4.17.
DOMPurify s'exécute en JavaScript et fonctionne dans tous les navigateurs modernes (Safari (10+), Opera (15+), Edge, Firefox et Chrome - ainsi que presque tout ce qui utilise Blink, Gecko ou WebKit). Il ne casse pas sur MSIE ou d'autres navigateurs obsolètes. Il ne fait simplement rien.
Notez que DOMPurify v2.5.9 est la dernière version prenant en charge MSIE. Pour les mises à jour de sécurité importantes compatibles avec MSIE, veuillez utiliser la branche 2.x.
Nos tests automatisés couvrent 9 combinaisons navigateur/OS sur les moteurs actuels (Chromium, Firefox et WebKit sous Ubuntu, macOS et Windows) à chaque push, et une matrice distincte relance la suite sur des instantanés de moteurs plus anciens (jusqu'à environ Chromium 110, Firefox 108 et WebKit 16.4, soit environ trois ans) afin que les régressions sur les navigateurs obsolètes soient également détectées. Nous exécutons aussi Node.js v20, v22, v24, v25 et v26 avec DOMPurify sur jsdom. Les versions plus anciennes de Node sont également connues pour fonctionner, mais bon... aucune garantie.
DOMPurify est écrit par des spécialistes de la sécurité qui possèdent une vaste expérience des attaques web et du XSS. N'ayez crainte. Pour plus de détails, veuillez également lire nos Objectifs de sécurité et modèle de menace. Veuillez le lire. Vraiment. Et si vous aimez les détails macabres, la page Classes d'attaques et historique des contournements répertorie les astuces de mutation de parseur, d'espaces de noms, de clobbering et de templates contre lesquelles DOMPurify se défend.
Le projet DOMPurify a inspiré la création de l'HTML Sanitizer API, qui est déjà déployée dans de nombreux navigateurs. La même capacité est désormais standardisée directement dans la spécification WHATWG HTML.
Table des matières
- Que fait-il ?
- Comment l'utiliser ?
- Y a-t-il une démo ?
- Que faire si je trouve un bug de sécurité ?
- Quelques exemples de purification, s'il vous plaît ?
- Qu'est-ce qui est pris en charge ?
- Qu'en est-il des navigateurs anciens comme Internet Explorer ?
- Qu'en est-il de DOMPurify et des Trusted Types ?
- Puis-je configurer DOMPurify ?
- Configuration persistante
- Hooks
- Configuration supprimée
- Intégration continue
- Liste de diffusion de sécurité
- Qui a contribué ?
Que fait-il ?
DOMPurify assainit le HTML et prévient les attaques XSS. Vous pouvez fournir à DOMPurify par exemple une chaîne remplie de HTML malveillant et il renverra une chaîne (sauf configuration contraire) contenant du HTML propre. DOMPurify supprimera tout ce qui contient du HTML dangereux et empêchera ainsi les attaques XSS et autres nuisances. Il est également extrêmement rapide. Nous utilisons les technologies fournies par le navigateur et les transformons en filtre XSS. Plus votre navigateur est rapide, plus DOMPurify sera rapide.
Comment l'utiliser ?
C'est facile. Il suffit d'inclure DOMPurify sur votre site web.
Utilisation de la version non minifiée (source-map disponible)
<script type="text/javascript" src="dist/purify.js"></script>
Utilisation de la version de production minifiée et testée (source-map disponible)
<script type="text/javascript" src="dist/purify.min.js"></script>
Ensuite, vous pouvez assainir les chaînes en exécutant le code suivant :
const clean = DOMPurify.sanitize(dirty);
Ou peut-être ceci, si vous aimez travailler avec Angular ou similaire :
import DOMPurify from 'dompurify';
const clean = DOMPurify.sanitize('<b>hello there</b>');
Le HTML résultant peut être écrit dans un élément DOM à l'aide de innerHTML ou dans le DOM à l'aide de document.write(). Cela dépend entièrement de vous.
Notez que par défaut, nous autorisons HTML, SVG et MathML. Si vous n'avez besoin que de HTML, ce qui pourrait être un cas d'usage très courant, vous pouvez facilement le configurer également :
const clean = DOMPurify.sanitize(dirty, { USE_PROFILES: { html: true } });
Y a-t-il un potentiel de piège ?
Eh bien, veuillez noter que si vous assainissez d'abord le HTML puis le modifiez ensuite, vous risquez facilement d'annuler les effets de l'assainissement. Si vous transmettez le balisage assaini à une autre bibliothèque après l'assainissement, assurez-vous que la bibliothèque ne manipule pas le HTML de son propre chef. Consultez Security Goals & Threat Model pour des recettes d'utilisation sûre et les balises/attributs qui méritent réflexion, ainsi que Attack Classes & Bypass History pour comprendre pourquoi le post-traitement et le changement de contexte du balisage déjouent l'assainissement.