К содержанию
Кирпич Контакты

Как вывести недоверенную строку обычным текстом в виджете

Михаил ЖуковДиректор по развитию Опубликовано
Обложка статьи «Безопасный вывод текста»: абстрактная точечная фигура, фирменный graphite фон.

Если виджет должен показать обычный текст из URL, формы или внешнего ответа, выводи его как текст, не превращая в разметку. Сначала найди источник строки и место использования. Для HTML, адреса ссылки, стиля и кода нужны разные решения. Ни знакомый поставщик данных, ни возможность добавить свой код не подтверждают безопасную обработку автоматически.

Проследи строку от источника до вывода

Составь список входов: параметры адреса, поля формы, сохранённые значения, ответы внешних сервисов. Для каждого укажи, где строка оказывается на странице. Важно не только происхождение, но и конечная операция: текстовая надпись, HTML, адрес перехода или исполняемый код.

OWASP описывает DOM XSS как риск небезопасной обработки данных в браузере и связывает защиту с конкретным контекстом вывода. Для отображаемого текста рекомендуются безопасные текстовые операции, включая textContent, вместо интерпретации строки как HTML.

Разные назначения строки требуют разных решений
НазначениеПодходГраница
Обычное пояснениеВывести как текст через предназначенный для этого APIСтрока не должна становиться HTML
Адрес кнопкиПроверить допустимые адреса и схемы отдельным правиломТекстовый вывод не делает произвольный URL допустимым
Разрешённое форматированное содержаниеОтдельно определить разрешённую разметку и проверенную очисткуОдной проверки длины недостаточно
Исполняемая логикаНе превращать внешнюю строку в кодОчистка HTML не разрешает выполнение строки

Для каждого места запиши фактическую операцию. Если внешняя строка собирается в HTML-шаблон, назначается через innerHTML или передаётся в выполнение, передай этот поток на предметный разбор. Не считай удаление одного опасного слова достаточным правилом.

Для обычной надписи используй текстовый вывод

Условная строка добавляется как текст, не как HTML.
const message = 'Условный вопрос по каталогу';
const output = document.createElement('p');
output.textContent = message;
document.body.append(output);

В этом примере message передаётся в textContent. Смысл операции — показать строку, не разбирать её как фрагмент разметки. Если задача состоит только в подписи, не нужен более сильный механизм HTML. Содержимое самой строки всё равно должно соответствовать продуктовому смыслу: безопасный вывод не подтверждает достоверность написанного.

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

Разрешённый HTML — отдельная задача

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

HTML-очистка и выполнение JavaScript — разные контексты. OWASP отдельно предупреждает о смешении этих задач. Если строка становится обработчиком, стилем или адресом, нельзя объявить её безопасной только потому, что она прошла текстовый фильтр.

Если форматирование не является необходимым, оставь обычный текст. Если допустимый HTML и проверенная обработка не определены, не выпускай такую ветку как готовую. Исправь конкретный поток данных и повтори локальные проверки, не делая вывода о всей системе.

В редакторе Кирпича есть возможность добавлять свой код. Она не является обещанием изоляции произвольного кода или безопасности любой внешней строки. Содержание и поведение собственной реализации требуют проверки.

textContent показывает содержимое строки как текст. HTML-вставка требует отдельного решения с проверенной обработкой; произвольную строку нельзя передавать напрямую в innerHTML.
Схема защитного проектирования. Правило для текста нельзя переносить на HTML, адрес или исполняемый код.

Проверь поток данных в своём фрагменте

Проверка вывода текста

Найти конкретные источники и места интерпретации без выдуманного балла безопасности.

Отметь выполненные проверки. Итог показывает оставшиеся действия, а не оценку качества бизнеса.

Перечисли входы и контексты. Обычный текст выводи текстовой операцией и проверь локальные строки. HTML обрабатывай только по отдельному правилу; адреса, стили и код не считаются защищёнными тем же способом. Результат относится к конкретным проверенным потокам.

Передай исправление с точной границей

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

Источники и документация

  1. DOM based XSS Prevention Cheat Sheet · проверено 11.10.2026
  2. Аналитика с ИИ для B2B-сайтов · проверено 11.10.2026