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-команду: как ограничить исполнение.
