Русский

Инструменты разработчика · Редактор HTML WYSIWYG

Дезинфекция вставленного HTML: что нужно удалить, прежде чем оно дойдет до вашего CMS или по электронной почте

· Как это работает

HTML безопасность очистка текста

Разрешена текстовая структура, проходящая шлюз, в то время как стили скриптов и небезопасные ссылки отклоняются.
Оригинальная векторная иллюстрация ToolAcre

Объясняет, что делает дезинфицирующее средство HTML: от тегов и атрибутов из разрешенных списков до удаленных скриптов и нейтрализованных URL-адресов, а также как предварительная проверка разметки упрощает написание правил дезинфицирующего средства.

Вставленный фрагмент, содержащий клик, открывается со скрытым риском при вводе форматированного текста.

Вставленная привязка может скрыть клик рядом с невинным пунктом назначения. ToolAcre преобразует каждое имя атрибута в нижний регистр и сохраняет только атрибуты, явно указанные для принятого элемента, поэтому onclick исчезает даже при изменении его регистра. В отчете об удалении указывается этот обработчик событий, а не молча указывается неизмененный источник.

Эта граница действует перед вставкой расширенной пасты, когда источник возвращается в визуальный режим, перед копированием, перед извлечением обычного текста и снова при создании документов предварительного просмотра. Повторение уменьшает случайный обход между действиями, но проект по-прежнему отказывается называть рукописный токенизатор универсальным фильтром XSS.

Почему списки разрешенных лучше черных — объясняет, что называть разрешенное безопаснее, чем пытаться составить список всех опасных конструкций.

Список разрешений начинается с присвоения имени разрешенной структуре: абзацы, заголовки, семантические встроенные элементы, списки, списки описаний, цитаты, кодоподобные элементы и привязки. Неизвестная обычная оболочка теряет тег, сохраняя при этом текст. Опасный контейнер, такой как скрипт, стиль, iframe, форма, SVG или MathML, также теряет свое содержимое.

Блок-лист должен будет предвидеть каждую опасную или неподдерживаемую конструкцию. Белый список отклоняет то, что он не понимает. Это хороший выбор для ограниченного вывода одного редактора, но он остается ограниченным своим токенизатором. Восстановление ошибки браузера HTML5 может создать дерево, отличное от меньшего синтаксического анализатора, когда задействованы намеренно искаженные входные данные.

Теги, атрибуты и схемы URL — охватывают три уровня фильтров дезинфицирующего средства с типичными решениями для каждого.

Фильтрация происходит на трех уровнях. Элементы определяют структурный словарь. Атрибуты для каждого элемента допускают только несколько значений, таких как ссылка href и заголовок, цитата, сокращенный заголовок, а также начало и тип упорядоченного списка. Затем проверка URL декодирует объекты, удаляет элементы управления и пробелы из пробы и проверяет полученную схему.

Принимаемые схемы: http, https, mailto, tel и ftp, а также относительные формы без явной схемы. JavaScript, данные, файлы, blob, vbscript и примеры отклонены в тестах. Сохранившиеся ссылки получают относительные значения, но это дополнение не заменяет политику назначения или проверку ссылок.

Стили: удалить, разрешить или перезаписать — обсуждается обработка встроенных стилей и почему многие системы полностью от них отказываются.

Атрибуты стиля удалены полностью. Модуль не пытается анализировать объявления, сохранять безопасное подмножество или перезаписывать токены проектирования. Эта политика удаляет скопированный внешний вид и поверхности запросов на основе CSS вместе. Атрибуты class, id и data также исчезают, создавая переносимую, но намеренно менее выразительную разметку.

Системы с реальными требованиями к стилю нуждаются в другой пересмотренной политике. Добавление стиля в этот белый список без дезинфицирующего средства CSS существенно изменит его поверхность безопасности. Текущая реализация позволяет избежать этой проблемы, а не претендует на решение CSS безопасности для произвольных враждебных фрагментов.

Рабочий пример: извлеките правило из документированного списка разрешений ToolAcre, а не из приспособления, специфичного для Word.

Начните с `<div class="WordSection"><p style="color:red" onclick="x()">Notice <strong>today</strong></p></div>`. Элемент div разворачивается, класс и стиль не сохраняются, onclick удаляется, а абзац и сильный элемент остаются. Результат соответствует общей политике без указания того, какое приложение создало оболочку.

Добавьте ссылку на JavaScript и блок скрипта. Якорь сохраняет видимые слова, но теряет href; сценарий и тело исчезают. Прочтите указанные причины. Это упражнение помогает определить политику сервера, но слепое копирование точного подмножества ToolAcre может привести к пропуску элементов, которые требуются вашему приложению, или разрешению URL-адресов, которые запрещены вашей моделью угроз.

Дезинфекция на стороне сервера и на стороне клиента — объясняет, почему сервер должен дезинфицировать, даже если браузер уже это сделал.

Фильтрация клиентов улучшает локальное составление чертежей, но ей нельзя доверять со стороны сервера, получающего запросы, управляемые пользователем. Злоумышленники могут обойти страницу, напрямую вызвать конечную точку или воспользоваться разницей парсера. Сервер должен снова проанализировать и очистить с помощью поддерживаемой реализации с поддержкой HTML5, настроенной для его контекста рендеринга.

Кодирование вывода также остается отдельным. HTML, предназначенный как текст, должен быть экранирован шаблоном, а не вставлен как разметка. Фрагмент, намеренно отображаемый как HTML, требует очистки перед сохранением или выводом в соответствии с архитектурой. Предварительный просмотр в песочнице доказывает только то, что этот предварительный просмотр не предоставляет никаких сценариев, форм или доступа того же происхождения.

Что этот инструмент охватывает — узкую фильтрацию вывода редактора, а не общую очистку враждебного ввода.

ToolAcre фильтрует свою собственную выходную поверхность, вопреки заявлению книги о том, что это всего лишь инструмент проверки. Точная коррекция уже: это не универсальное средство XSS для произвольного враждебного ввода. Источник говорит об этом прямо и документирует возможную разницу в синтаксическом анализаторе.

iframe — это глубокая защита для рендеринга внутри ToolAcre. Его пустой атрибут песочницы не разрешает выполнение скриптов, отправку форм или доступ к тому же источнику, а политика реферера не предусматривает никаких рефереров. Как только HTML копируется в другое место, этот кадр больше не защищает его. Безопасность публикации принадлежит принимающей системе.

Вывод: проверка локально, дезинфекция на сервере — кратко описан рабочий процесс и то, как редактор помогает вам увидеть, с чем столкнется дезинфицирующее средство.

Проверяйте локально, очищайте на сервере и визуализируйте в соответствии с контекстом. Это три отдельных шага. ToolAcre помогает выявить вставленный багаж и предлагает консервативную подгруппу черновиков, а уведомления об удалении делают эффекты политики видимыми до того, как фрагмент достигнет CMS или рабочего процесса электронной почты.

Не рекламируйте успешную предварительную версию как доказательство против XSS. Используйте тестовые полезные нагрузки только в одноразовом контенте, сохраняйте необработанный источник отдельно, когда имеет значение расследование, и проверяйте очистку места назначения независимо. Требования безопасности должны прекращаться именно там, где заканчиваются код и граница рендеринга.