Skip to content
EN

Инъекции в промпт в 2026 году: где возникает поверхность и что измеримо

Кратко. Инъекции в промпт объясняют на примере чата, где пользователь пишет «забудь инструкции».

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

Долю таких попыток не измерил никто, и причина честная: отличить попытку от обычного текста нельзя. Зато измеримо, как часто модель отказывается отвечать: у нас 0,38% живых вызовов. И об одном случае, когда мы показали такой отказ как результат анализа, стоит рассказать отдельно.

Проверить безопасность сайта →

Где на самом деле возникает поверхность атаки

Про инъекции в промпт обычно рассказывают на примере чата: пользователь пишет «забудь предыдущие инструкции». Это самый безобидный вариант, потому что пользователь атакует собственную сессию.

Настоящая поверхность возникает там, где в промпт попадает содержимое, которым распоряжается посторонний. У нас это происходит на каждом инструменте: чтобы объяснить результат проверки, мы передаём модели заголовки ответа чужого сайта, его DNS-записи, текст его страницы, содержимое его robots.txt.

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

Именно такой класс и стоит первым в перечне рисков для приложений с языковыми моделями, который ведёт OWASP. И у него есть неприятное свойство: надёжного технического решения не существует. Модель не различает «данные» и «инструкции» — для неё всё это один поток текста.

Данные исследования

Исходные данные всех таблиц этого отчёта доступны в виде открытого CSV-файла (UTF-8, первая строка — заголовки).

Скачать датасет (CSV)

Что можно измерить, а что нет

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

Что измеримо — как часто модель отказывается отвечать. У нас это логируется, и за десять дней августа 2026 года на 9 474 живых обращения пришлось 36 отказов:

ЗнаменательОтказовДоля
Все живые обращения36 из 9 4740,38%
Резюме статей у российского провайдера36 из 1 3912,59%

То есть примерно одно резюме статьи из сорока модель отклоняет. Все 36 случаев пришлись на одну поверхность и один язык, и формулировка отказа во всех одинакова.

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

Отказ, который мы однажды выдали за анализ

Об этом стоит рассказать, потому что ошибка типична и не очевидна.

Наша система получала от модели ответ и показывала его пользователю в блоке «ИИ-резюме». Когда модель отказывалась отвечать, она возвращала не ошибку, а обычный текстовый ответ — вежливую фразу о том, что тема не обсуждается. Для кода это был успешный ответ, и он честно отображался как результат анализа.

Пользователь видел в блоке разбора своей проверки фразу вида «я не могу обсуждать эту тему». Формально система работала правильно: запрос ушёл, ответ пришёл, ответ показан. Фактически в интерфейсе публиковался отказ под видом вывода.

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

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

Что делать, если модель читает чужой текст

Универсального решения нет, но набор мер, снижающих ущерб, известен и работает.

  1. Считайте вывод модели ненадёжным по умолчанию. Не выполняйте его как команду, не подставляйте в запрос к базе, не переходите по ссылкам из него. Если модель предлагает действие — его должен подтвердить человек или отдельная проверка в коде.
  2. Экранируйте вывод при показе. Мы отдаём из модели только размеченный минимум — выделение и моноширинный текст, — и превращаем его в разметку после экранирования. Модель физически не может вставить работающий тег.
  3. Ограничьте, что модель вообще видит. Чем меньше постороннего текста попадает в промпт, тем меньше поверхность. Мы передаём разобранные значения, а не сырые страницы целиком, — и не потому, что так дешевле, а потому что так меньше чужого текста.
  4. Отделяйте инструкции от данных явно. Это не защита, а гигиена: модель не гарантирует соблюдения границы, но чёткая структура промпта заметно снижает вероятность случайного смешения.
  5. Не давайте модели прав больше, чем нужно. Если она не может ничего изменить, самая удачная инъекция даёт только испорченный текст. Это единственная мера, которая работает независимо от изобретательности нападающего.

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

Первоисточник по классификации рисков: перечень OWASP для приложений с языковыми моделями.

ЗаголовкиCSP, HSTS, X-Frame-Options и др.
SSL/TLSШифрование и сертификат
КонфигурацияСерверные настройки и утечки
Оценка A-FОбщий балл безопасности

Почему нам доверяют

OWASP
рекомендации
15+
заголовков безопасности
<2с
результат
A–F
оценка безопасности

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

1

Введите URL сайта

2

Анализ заголовков безопасности

3

Получите оценку A–F

Что проверяет анализ безопасности?

Инструмент проверяет HTTP-заголовки безопасности, конфигурацию SSL/TLS, утечки серверной информации и защиту от распространённых атак (XSS, clickjacking, MIMEsniffing). Оценка от A до F показывает общий уровень защиты.

Анализ заголовков

Проверка Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy и других.

Проверка SSL

Версия TLS, срок сертификата, цепочка доверия, поддержка HSTS.

Обнаружение утечек

Поиск раскрытых серверных версий, debug-режимов, открытых конфигов и директорий.

Отчёт с рекомендациями

Детальный отчёт с объяснением каждой проблемы и конкретными шагами для исправления.

Кому это нужно

Специалисты по безопасности

аудит HTTP-заголовков

DevOps

проверка конфигурации

Разработчики

CSP и HSTS настройка

Аудиторы

соответствие стандартам

Частые ошибки

Нет Content-Security-PolicyCSP — главная защита от XSS. Без него инъекция скриптов значительно проще.
Нет заголовка HSTSБез HSTS возможна downgrade-атака с HTTPS на HTTP. Включите Strict-Transport-Security.
Server header раскрывает версиюServer: Apache/2.4.52 помогает атакующим подобрать эксплойт. Скройте версию.
X-Frame-Options не установленСайт можно встроить в iframe для clickjacking-атаки. Установите DENY или SAMEORIGIN.
Нет X-Content-Type-OptionsБез nosniff браузер может интерпретировать файлы неправильно (MIME sniffing).

Лучшие практики

Начните с базовых заголовковМинимум: HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy. Займёт 5 минут.
Внедрите CSP постепенноНачните с Content-Security-Policy-Report-Only, мониторьте нарушения, затем включите.
Скройте серверные заголовкиУдалите Server, X-Powered-By, X-AspNet-Version из ответов.
Настройте Permissions-PolicyОграничьте доступ к камере, микрофону, геолокации — только то, что реально используется.
Проверяйте после каждого деплояЗаголовки безопасности могут быть перезаписаны при обновлении конфигурации сервера.

Получите больше с бесплатным аккаунтом

История security-проверок и мониторинг HTTP-заголовков безопасности.

Зарегистрироваться (FREE)

Больше по теме

Часто задаваемые вопросы

Как protect?

Defense in depth: input validation + hardened system prompt + structured output + guardrails + output filter + tool sandbox + rate limit. НИКАКОЕ одно средство недостаточно.

Guardrails recommendation?

Lakera Guard (commercial, best coverage). Rebuff (open Python). NVIDIA NeMo (comprehensive, complex). Combine при critical use cases.

RAG poisoning — как защищать?

Source whitelist, content sanitization перед embedding, embedding-space anomaly detection. 100% fix не существует.

Monitor prompt injection attempts?

Log все suspicious inputs + LLM output anomalies. Alert на patterns ("ignore previous", etc). Enterno Security Scanner basic checks.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.