HTML из ответа LLM: как не превратить чат в XSS

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

Пример из разработки

Помощник составляет описание товара на основе внешнего сайта. В исходном материале есть вредоносная разметка; модель переносит её в ответ. Интерфейс вставляет строку через небезопасный HTML-рендер, потому что «это написал наш AI». Источник данных изменился, но браузер всё равно исполняет опасный контекст. Доверие к модели не заменяет обычную защиту веб-приложения.

Почему это работает

Выберите допустимый формат заранее. Для текста используйте безопасное текстовое представление. Если продукту нужен ограниченный HTML или Markdown, используйте подходящий поддерживаемый парсер и очистку разрешённой разметки; отдельно проверьте ссылки, изображения и атрибуты. Контекстное экранирование зависит от места вставки: HTML-текст, атрибут и JavaScript требуют разных решений. Не пытайтесь заменить обработку одним регулярным выражением, удаляющим слово script. Безопасность должна сохраняться и при неожиданном ответе модели.

Проверка перед использованием

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

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

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

Безопасный вывод — обязательная часть LLM-приложения даже тогда, когда у агента вообще нет инструментов записи. В платном курсе LLM Security PRO: Prompt Injection, утечки, tool-abuse можно продолжить изучение соответствующего инженерного направления. Перед покупкой сравните программу и открытые материалы со своей задачей.

Документация для проверки технических деталей: OWASP: предотвращение XSS.

Следующий шаг: Безопасность LLM-приложений: практические проверки. По смежным вопросам: CSV из ответа AI открывает формулы: как проверить экспорт, LLM предлагает shell-команду: как ограничить исполнение.