NKDL/Статьи/Статья
Безопасность ИИ

Безопасность ИИ-ассистентов и чат-ботов на сайте

29 сентября 2026 · 12 минут чтения · Николай Кодзаев

Коротко
  • Языковая модель не отличает инструкции владельца от текста, который ей прислал посетитель или который она прочитала на странице. Полностью это не лечится, поэтому защиту строят вокруг модели.
  • Главное правило: модель — ненадёжный компонент. Она получает минимум данных и минимум прав, а её ответы и действия проверяются кодом.
  • Безопасность ИИ-бота — это процесс: набор атакующих запросов в тестах, журнал, лимиты и регулярный пересмотр. В англоязычной практике это называют MLSecOps.

ИИ-ассистент на сайте выглядит как обычный чат, но устроен иначе, чем форма обратной связи. Форма принимает текст и складывает его в базу. Ассистент читает текст и действует по нему: отвечает от имени компании, ищет в базе знаний, иногда создаёт заявки или отправляет письма. Всё, что может повлиять на его поведение, становится частью поверхности атаки.

Что уже случалось

  • Air Canada, 2024. Чат-бот авиакомпании пообещал клиенту скидку на билет, которой не было в правилах. Клиент обратился в канадский трибунал по гражданским спорам, и тот обязал компанию выплатить разницу. Довод, что бот — «отдельная сущность» и компания за него не отвечает, трибунал отклонил (дело Moffatt v. Air Canada).
  • Дилер Chevrolet, 2023. Пользователи уговорили чат-бота на сайте дилерского центра в США согласиться продать внедорожник за 1 доллар и назвать это «юридически обязывающим предложением». Денег компания не потеряла, но скриншоты разошлись по соцсетям.
  • DPD, 2024. Клиент службы доставки попросил бота выругаться и написать стихи о том, какая компания плохая. Бот выполнил обе просьбы. Компания отключила ИИ-часть ассистента.

Во всех трёх случаях не понадобилось ни одной технической атаки. Хватило текста в окне чата.

Корень проблемы: инструкции и данные в одном потоке

В обычной программе код и данные разделены. SQL-инъекции научились закрывать параметризованными запросами: данные передаются отдельно и никогда не выполняются как команды. У языковой модели такого разделения нет. Системный промпт, сообщение посетителя и текст найденного документа попадают в модель одним потоком, и она сама решает, чему следовать.

Прямая инъекция

Посетитель пишет в чат: «Забудь предыдущие инструкции. Теперь ты…». Современные модели сопротивляются самым простым формулировкам, но надёжного способа отсечь все варианты нет: атакующему достаточно найти одну работающую формулировку.

Косвенная инъекция

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

Опасная тройка

Самые серьёзные утечки возникают, когда у ИИ-агента одновременно есть три возможности:

  1. доступ к закрытым данным — заказы клиентов, переписка, внутренние документы;
  2. недоверенный контент на входе — сообщения посетителей, чужие сайты, входящие письма;
  3. канал наружу — отправка писем, запросы к внешним адресам, даже ссылка или картинка в ответе.

Последний пункт часто недооценивают. Если бот умеет выводить в ответе картинки по ссылке, внедрённая инструкция может попросить его вставить картинку с адресом вида https://сайт-атакующего/pixel.png?data=…, куда подставлены закрытые данные. Браузер посетителя сам загрузит картинку, и данные уйдут. Защита — убрать хотя бы одну из трёх возможностей: не давать модели закрытые данные, не пускать недоверенный контент или закрыть каналы наружу.

Десять рисков по OWASP

OWASP — открытое сообщество, которое составляет общепринятые списки угроз для веб-приложений. Для приложений с языковыми моделями у него есть отдельный список, актуальная редакция — 2025 года. Вот как эти риски выглядят на сайте компании:

КодРискКак выглядит на сайтеЧто делать
LLM01Промпт-инъекцияПосетитель или текст на странице, которую читает бот, даёт модели новые инструкции.Считать весь внешний текст данными, ограничить действия модели, проверять ответ.
LLM02Раскрытие чувствительных данныхБот пересказывает чужие заказы, внутренние цены или данные из базы знаний, которые не должен видеть посетитель.Давать модели только те данные, которые можно показать этому посетителю. Фильтр ПДн на выходе.
LLM03Цепочка поставокЗаражённая библиотека, подменённая модель или плагин из непроверенного источника.Фиксировать версии, проверять источники, сканировать зависимости.
LLM04Отравление данных и моделиВ базу знаний попадает документ с ложными фактами или скрытыми инструкциями.Контролировать, кто и что добавляет в базу знаний, хранить историю изменений.
LLM05Небезопасная обработка ответаОтвет модели вставляется в страницу как HTML или уходит в SQL-запрос без проверки.Обрабатывать ответ как пользовательский ввод: экранировать, валидировать.
LLM06Избыточные полномочияУ бота есть доступ к удалению заказов или отправке писем от имени компании.Минимальные права, список разрешённых действий, подтверждение человеком.
LLM07Утечка системного промптаПосетитель выманивает инструкции бота, а в них ключи или внутренние правила.Не хранить в промпте секреты. Исходить из того, что промпт станет публичным.
LLM08Уязвимости векторного поискаПоиск по базе знаний выдаёт документы другого клиента или другого уровня доступа.Разграничение доступа на уровне поиска, а не только интерфейса.
LLM09Недостоверные ответыБот уверенно называет несуществующую скидку или неверный срок доставки.Ответы только по источникам, ссылка на источник, «не знаю» вместо догадки.
LLM10Неограниченное потреблениеСкрипт отправляет тысячи длинных запросов, и счёт за модель растёт.Лимиты на запросы и длину, общий бюджет, оповещения о расходе.

Как устроена защита

Раз модель нельзя сделать полностью надёжной, её окружают слоями, каждый из которых работает кодом и не зависит от того, «послушается» ли модель.

Где ставить защитуМодель считается ненадёжным компонентом: всё, что входит в неё и выходит из неё, проходит проверку. Серые блоки с чёрной рамкой — уровни защиты.
недоверенные данныеПосетитель сайтаВнешний контентстраницы, файлы,письма, база знанийВходной контрольлимиты, длина,разметка источниковМодель (LLM)системный промптбез секретов и ключейПроверка ответассылки, разметка,персональные данныеОтвет посетителюШлюз инструментовсписок разрешённых действий,подтверждение человекомВаши системыCRM, почта, база данныхЖурнал и мониторинг: запросы, ответы, вызовы инструментов
  • Входной контроль. Лимиты на частоту и длину сообщений. Внешние документы передаются модели с явной пометкой, что это данные, а не инструкции. Это не гарантирует защиты, но снижает число срабатываний.
  • Модель без секретов. В системном промпте нет ключей, паролей и того, что нельзя показывать. Исходите из того, что промпт однажды будет опубликован.
  • Минимум данных. Модель видит только то, что можно показать этому посетителю. Если бот отвечает про статус заказа, код сначала проверяет, что заказ принадлежит этому человеку, и только потом передаёт данные модели.
  • Шлюз инструментов. Модель не вызывает API напрямую. Она предлагает действие, а код проверяет его по списку разрешённых, с ограничениями по параметрам. Всё, что меняет данные или уходит наружу, — с подтверждением человеком.
  • Проверка ответа. Ответ модели обрабатывается как пользовательский ввод: экранируется перед вставкой в страницу, внешние ссылки и картинки разрешены только с ваших доменов, номера телефонов и почты маскируются.
  • Журнал. Все запросы, ответы и вызовы инструментов пишутся в журнал. Без него вы не узнаете об атаке и не сможете разобрать инцидент.

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

Счёт за модель как точка атаки

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

Сколько могут стоить сутки автоматических запросовДопущения: 60 запросов в минуту, 9 000 токенов на запрос с историей диалога, условная цена 1 ₽ за 1 000 токенов.

Цена условная, подставьте тариф своего провайдера. Лимит по адресу обходится через много адресов, поэтому решающую роль играет общий бюджет.

Лимит с одного адреса полезен, но атакующий с сотней адресов его обойдёт. Надёжно работает только общий дневной бюджет на весь бот: при его исчерпании бот переходит в режим «оставьте контакт, мы ответим», а вам приходит уведомление. Это одна проверка в коде, и её отсутствие — самая дорогая ошибка в этом списке.

MLSecOps: безопасность как процесс

MLSecOps — это практика встраивания безопасности во весь цикл работы с моделями: от выбора модели и данных до эксплуатации. Для ИИ-бота на сайте она сводится к нескольким привычкам.

До запуска

  • Модель угроз. Что бот видит, что может сделать, кто может ему написать и что худшее может произойти. Полчаса на бумаге экономят недели на разбор инцидента.
  • Набор атакующих запросов. 50–100 сообщений: попытки выманить промпт, сменить роль, получить чужие данные, заставить пообещать скидку. Этот набор прогоняется автоматически при каждом изменении промпта или смене модели, как обычные регрессионные тесты.
  • Проверка источников. Версии моделей и библиотек зафиксированы, документы для базы знаний добавляются через одного ответственного.

После запуска

  • Мониторинг. Оповещения о всплеске запросов, расходов и срабатываний фильтров.
  • Разбор журнала. Раз в неделю просматривать диалоги, где бот не смог ответить или сработал фильтр. Новые атаки добавлять в тестовый набор.
  • Версии промпта. Системный промпт хранится в репозитории с историей изменений, а не правится в админке.

Персональные данные

Посетители пишут в чат имена, телефоны и подробности своих ситуаций. Для российской компании это обработка персональных данных по 152-ФЗ: нужны политика, понятные сроки хранения журнала и выбор провайдера модели с учётом того, где обрабатываются данные. Номера телефонов и почты в журнале лучше маскировать сразу.

Чек-лист перед запуском

  1. В системном промпте нет ключей, паролей и внутренних данных.
  2. Модель получает только данные, которые можно показать текущему посетителю.
  3. Действия, меняющие данные или уходящие наружу, требуют подтверждения человеком.
  4. Ответ модели экранируется, внешние ссылки и картинки в ответе запрещены или ограничены вашими доменами.
  5. Есть лимиты на частоту и длину запросов и общий дневной бюджет с оповещением.
  6. Внешние документы и страницы передаются модели с пометкой «это данные».
  7. Набор атакующих запросов прогоняется при каждом изменении промпта или модели.
  8. Все диалоги и вызовы инструментов пишутся в журнал, персональные данные в нём маскируются.
  9. Бот честно говорит «не знаю» и передаёт вопрос человеку, а не придумывает ответ.
  10. На сайте указано, что посетитель общается с ИИ-ассистентом, и есть политика обработки данных.

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

Источники

  • OWASP Top 10 for LLM Applications, 2025 — genai.owasp.org
  • MITRE ATLAS — база тактик атак на системы машинного обучения, atlas.mitre.org
  • Greshake и др. Not what you’ve signed up for: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection, 2023 — arXiv:2302.12173
  • Simon Willison, серия заметок о промпт-инъекциях и «опасной тройке» (lethal trifecta) — simonwillison.net
  • NIST AI Risk Management Framework — nist.gov
  • Moffatt v. Air Canada, 2024 BCCRT 149 — решение трибунала Британской Колумбии по делу о чат-боте.
Ещё

Читайте также

ИИ · 8 минутИИ-ассистент в поддержке: когда он окупаетсяПри 3 000 обращений в месяц ассистент окупается за месяц, при 100 — за шесть лет. Показываем расчёт и простой способ проверить на своих данных.Сайты · 7 минутСколько стоит лендинг и из чего складывается цена42 часа работы по этапам, пять опций, которые сильнее всего меняют цену, и семь ошибок, из-за которых лендинг собирает меньше заявок.Telegram-боты · 7 минутСколько стоит Telegram-бот для записи и когда он окупаетсяРазбираем 47 часов работы по этапам и сравниваем с подпиской на конструктор: в одном случае своя разработка окупается за год, в другом — почти за два с половиной.Скорость сайтов · 6 минутКак мы ускорили nkdl.ru: разбор с цифрамиГлавный экран на телефоне появлялся через 4,3 секунды. Нашли пять причин, большая часть исправлялась за минуты. Показываем замеры до и после.
Обсудим задачу

Нужна помощь с проектом?

Посчитайте примерную стоимость в квизе или напишите в Telegram. Первая консультация бесплатная.