
DOMPurify v3.4.13
DOMPurify — это DOM-only, сверхбыстрый, сверхтолерантный XSS-санитайзер для HTML, MathML и SVG. DOMPurify работает с безопасным набором настроек по умолчанию, но предлагает множество возможностей конфигурации и хуков. Демо:
DOMPurify
DOMPurify — это сверхбыстрый, чрезвычайно устойчивый санитайзер XSS для HTML, MathML и SVG, работающий исключительно с DOM.
Начать пользоваться им также очень просто. DOMPurify был запущен в феврале 2014 года и с тех пор достиг версии v3.4.17.
DOMPurify работает на JavaScript и поддерживается во всех современных браузерах (Safari (10+), Opera (15+), Edge, Firefox и Chrome — а также практически во всём остальном, что использует Blink, Gecko или WebKit). Он не ломается в MSIE или других устаревших браузерах. Он просто ничего не делает.
Обратите внимание, что DOMPurify v2.5.9 — последняя версия с поддержкой MSIE. Для важных обновлений безопасности, совместимых с MSIE, используйте ветку 2.x.
Наши автоматизированные тесты охватывают 9 комбинаций браузер/ОС на текущих движках (Chromium, Firefox и WebKit в Ubuntu, macOS и Windows) при каждом push, а отдельная матрица повторно прогоняет набор тестов на снимках старых движков (примерно до Chromium 110, Firefox 108 и WebKit 16.4, возрастом около трёх лет), чтобы также отлавливать регрессии в устаревших браузерах. Мы также запускаем DOMPurify на Node.js v20, v22, v24, v25 и v26 с jsdom. Более старые версии Node, как известно, тоже работают, но, эх... без гарантий.
DOMPurify написан специалистами по безопасности, обладающими обширным опытом в веб-атаках и XSS. Не бойтесь. Для получения дополнительных сведений также прочитайте о наших Целях безопасности и модели угроз. Пожалуйста, прочитайте это. Серьёзно. А если вам нравятся кровавые подробности, страница Классы атак и история обходов каталогизирует приёмы мутации парсера, пространств имён, переопределения (clobbering) и шаблонов, от которых защищается DOMPurify.
Проект DOMPurify вдохновил на создание HTML Sanitizer API, который уже поставляется во многих браузерах. Та же возможность сейчас стандартизируется непосредственно в спецификации WHATWG HTML.
Содержание
- Что он делает?
- Как его использовать?
- Есть ли демо?
- Что делать, если я найду уязвимость?
- Можно несколько примеров очистки?
- Что поддерживается?
- А как насчёт устаревших браузеров вроде Internet Explorer?
- А как насчёт DOMPurify и Trusted Types?
- Можно ли настроить DOMPurify?
- Постоянная конфигурация
- Хуки
- Удалённая конфигурация
- Непрерывная интеграция
- Список рассылки по безопасности
- Кто внёс вклад?
Что он делает?
DOMPurify очищает HTML и предотвращает XSS-атаки. Вы можете передать DOMPurify, например, строку с небезопасным HTML, и он вернёт строку (если не настроено иное) с чистым HTML. DOMPurify удалит всё, что содержит опасный HTML, и тем самым предотвратит XSS-атаки и другие неприятности. К тому же он чертовски быстрый. Мы используем технологии, предоставляемые браузером, и превращаем их в XSS-фильтр. Чем быстрее ваш браузер, тем быстрее будет работать DOMPurify.
Как его использовать?
Это просто. Просто подключите DOMPurify на своём сайте.
Использование неминифицированной версии (доступна source-map)
<script type="text/javascript" src="dist/purify.js"></script>
Использование минифицированной и протестированной production-версии (source-map доступен)
<script type="text/javascript" src="dist/purify.min.js"></script>
После этого вы можете очистить строки, выполнив следующий код:
const clean = DOMPurify.sanitize(dirty);
Или, возможно, это, если вы любите работать с Angular или подобными:
import DOMPurify from 'dompurify';
const clean = DOMPurify.sanitize('<b>hello there</b>');
Полученный HTML можно записать в элемент DOM с помощью innerHTML или в DOM с помощью document.write(). Это полностью на ваше усмотрение.
Обратите внимание, что по умолчанию мы разрешаем HTML, SVG и MathML. Если вам нужен только HTML, что может быть очень распространённым случаем, вы можете легко настроить это:
const clean = DOMPurify.sanitize(dirty, { USE_PROFILES: { html: true } });
Есть ли здесь потенциальные подводные камни?
Что ж, обратите внимание: если вы сначала санируете HTML, а затем модифицируете его впоследствии, вы можете легко свести на нет эффект санирования. Если вы передаёте санированную разметку в другую библиотеку после санирования, убедитесь, что эта библиотека не манипулирует HTML самостоятельно. См. Security Goals & Threat Model — там описаны рецепты безопасного использования и теги/атрибуты, о которых стоит подумать дважды, а также Attack Classes & Bypass History — о том, почему постобработка и изменение контекста разметки сводят санирование на нет.