Об этом проекте

DOMPurify — это XSS-санитайзер на основе DOM для HTML, MathML и SVG. Он принимает грязную разметку в виде строки, элемента, DocumentFragment или Document, удаляет элементы и атрибуты, которые могут выполнять скрипты или иным образом выходить за пределы предполагаемого контекста разметки, и по умолчанию возвращает очищенный HTML. Базовый API для браузера — DOMPurify.sanitize(dirty); пакет также можно импортировать в проектах, использующих сборщики. Конфигурация по умолчанию разрешает HTML, SVG и MathML, включая CSS и пользовательские атрибуты данных. Приложения могут ограничить вывод одним профилем, например только HTML, определить разрешённые теги и атрибуты, запретить конкретные теги или атрибуты, добавить теги и атрибуты, управлять ARIA и атрибутами данных, настраивать пользовательские элементы и встроенные элементы с кастомизацией, а также регулировать обработку URI данных и протоколов URL. Хуки позволяют дополнительно программно проверять или изменять данные в процессе очистки. Свойство DOMPurify.removed сообщает об удалённых узлах для отладки, но проект явно указывает, что его не следует использовать для принятия решений по безопасности. DOMPurify поддерживает современные Safari, Opera, Edge, Firefox и Chrome, а также другие браузеры на актуальных движках Blink, Gecko или WebKit. В неподдерживаемых устаревших браузерах, таких как Internet Explorer, он возвращает входные данные без изменений и предоставляет свойство isSupported, чтобы вызывающий код мог предусмотреть запасной вариант. Ветка 2.x, заканчивающаяся версией v2.5.9, является документированной линией для обновлений безопасности, совместимых с IE. Использование на серверной стороне возможно в Node.js при наличии DOM. Документированная настройка использует jsdom, и в README настоятельно рекомендуется поддерживать jsdom в актуальном состоянии, поскольку старые реализации DOM могут содержать уязвимости, связанные с парсингом, которые подрывают очистку. Особо предупреждается о недопустимости сочетания DOMPurify с happy-dom в настоящее время. Пакет isomorphic-dompurify упоминается как обёртка более высокого уровня для кроссплатформенных конфигураций. Другие возможности включают рекурсивную очистку DOM-шаблонов, поддержку Shadow DOM и опциональную интеграцию Trusted Types. При включении RETURN_TRUSTED_TYPE в поддерживающем браузере sanitize может возвращать значение TrustedHTML. Вызывающий код также может предоставить или отключить внутреннюю политику Trusted Types, а библиотека обнаруживает рекурсивную настройку политик. Проект подчёркивает границы безопасного использования: изменение или повторный парсинг очищенной разметки в другом контексте, или передача её через другую библиотеку, изменяющую DOM, может аннулировать гарантии санитайзера. В README есть ссылки на цели безопасности и модель угроз, историю классов атак и обходов, списки тегов и атрибутов по умолчанию, онлайн-демонстрацию и приватный контакт для вопросов безопасности. Автоматические тесты выполняются на текущих движках Chromium, Firefox и WebKit под Linux, macOS и Windows, на снимках старых движков, а также на нескольких версиях Node.js с jsdom. DOMPurify распространяется под двойной лицензией MPL-2.0 или Apache-2.0.