Инъекции в промпт объясняют на примере чата, где пользователь пишет «забудь инструкции». Это самый безобидный случай. Настоящая поверхность там, где в промпт попадает содержимое, которым распоряжается посторонний — а мы передаём модели заголовки, DNS-записи и текст страниц чужих сайтов на каждой проверке.
Долю таких попыток не измерил никто, и причина честная: отличить попытку от обычного текста нельзя. Зато измеримо, как часто модель отказывается отвечать: у нас 0,38% живых вызовов. И об одном случае, когда мы показали такой отказ как результат анализа, стоит рассказать отдельно.
Бесплатный онлайн-инструмент — сканер безопасности сайта: результат мгновенно, без регистрации.
Про инъекции в промпт обычно рассказывают на примере чата: пользователь пишет «забудь предыдущие инструкции». Это самый безобидный вариант, потому что пользователь атакует собственную сессию.
Настоящая поверхность возникает там, где в промпт попадает содержимое, которым распоряжается посторонний. У нас это происходит на каждом инструменте: чтобы объяснить результат проверки, мы передаём модели заголовки ответа чужого сайта, его DNS-записи, текст его страницы, содержимое его robots.txt.
Всё это пишет владелец проверяемого сайта, а не наш пользователь. Он может положить в заголовок ответа или в мета-тег любой текст — в том числе адресованный не человеку, а модели, которая этот текст будет читать.
Именно такой класс и стоит первым в перечне рисков для приложений с языковыми моделями, который ведёт OWASP. И у него есть неприятное свойство: надёжного технического решения не существует. Модель не различает «данные» и «инструкции» — для неё всё это один поток текста.
Исходные данные всех таблиц этого отчёта доступны в виде открытого CSV-файла (UTF-8, первая строка — заголовки).
Скачать датасет (CSV)Распространённость инъекций не измерена никем. Ни один поставщик, ни один исследователь не публикует, какая доля запросов содержит попытку внедрения. Причина простая: чтобы это посчитать, надо уметь надёжно отличать попытку от обычного текста, а именно этого никто и не умеет.
Что измеримо — как часто модель отказывается отвечать. У нас это логируется, и за десять дней августа 2026 года на 9 474 живых обращения пришлось 36 отказов:
| Знаменатель | Отказов | Доля |
|---|---|---|
| Все живые обращения | 36 из 9 474 | 0,38% |
| Резюме статей у российского провайдера | 36 из 1 391 | 2,59% |
То есть примерно одно резюме статьи из сорока модель отклоняет. Все 36 случаев пришлись на одну поверхность и один язык, и формулировка отказа во всех одинакова.
Оговорка: отказ — не признак атаки. Гораздо чаще это срабатывание фильтра на безобидную техническую тему: текст про уязвимости, про блокировки, про обход ограничений выглядит для фильтра подозрительно независимо от намерения. Мы приводим эту величину не как меру атак, а как ту часть поведения модели, которую система обязана предусмотреть.
Об этом стоит рассказать, потому что ошибка типична и не очевидна.
Наша система получала от модели ответ и показывала его пользователю в блоке «ИИ-резюме». Когда модель отказывалась отвечать, она возвращала не ошибку, а обычный текстовый ответ — вежливую фразу о том, что тема не обсуждается. Для кода это был успешный ответ, и он честно отображался как результат анализа.
Пользователь видел в блоке разбора своей проверки фразу вида «я не могу обсуждать эту тему». Формально система работала правильно: запрос ушёл, ответ пришёл, ответ показан. Фактически в интерфейсе публиковался отказ под видом вывода.
Починка — распознавать отказ по тексту ответа до того, как он попадёт в кэш и на страницу, и в этом случае не показывать блок вовсе. Заодно такой вызов не должен списывать квоту: пользователь ничего не получил.
Общий урок шире инъекций: успешный ответ модели не означает полезный ответ. Всё, что приходит от языковой модели, проходит по коду как обычная строка, и никакой механизм не отличит содержательный вывод от вежливого отказа, кроме проверки, которую вы напишете сами.
Универсального решения нет, но набор мер, снижающих ущерб, известен и работает.
Проверить, что ваш сайт отдаёт в заголовках и мета-тегах — то есть что увидела бы чужая модель, — можно в проверке заголовков.
Первоисточник по классификации рисков: перечень OWASP для приложений с языковыми моделями.
Инструмент проверяет HTTP-заголовки безопасности, конфигурацию SSL/TLS, утечки серверной информации и защиту от распространённых атак (XSS, clickjacking, MIMEsniffing). Оценка от A до F показывает общий уровень защиты.
Проверка Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy и других.
Версия TLS, срок сертификата, цепочка доверия, поддержка HSTS.
Поиск раскрытых серверных версий, debug-режимов, открытых конфигов и директорий.
Детальный отчёт с объяснением каждой проблемы и конкретными шагами для исправления.
аудит HTTP-заголовков
проверка конфигурации
CSP и HSTS настройка
соответствие стандартам
Strict-Transport-Security.Server: Apache/2.4.52 помогает атакующим подобрать эксплойт. Скройте версию.DENY или SAMEORIGIN.nosniff браузер может интерпретировать файлы неправильно (MIME sniffing).Content-Security-Policy-Report-Only, мониторьте нарушения, затем включите.Server, X-Powered-By, X-AspNet-Version из ответов.История security-проверок и мониторинг HTTP-заголовков безопасности.
Зарегистрироваться (FREE)Defense in depth: input validation + hardened system prompt + structured output + guardrails + output filter + tool sandbox + rate limit. НИКАКОЕ одно средство недостаточно.
Lakera Guard (commercial, best coverage). Rebuff (open Python). NVIDIA NeMo (comprehensive, complex). Combine при critical use cases.
Source whitelist, content sanitization перед embedding, embedding-space anomaly detection. 100% fix не существует.
Log все suspicious inputs + LLM output anomalies. Alert на patterns ("ignore previous", etc). Enterno Security Scanner basic checks.
Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.