Каждый промпт, отправленный в размещённую модель, покидает вашу среду. Если в нём есть ключ API, пароль или персональные данные клиента, эта информация теперь находится в чужих системах и, возможно, в логах с обеих сторон. Обнаружение конфиденциальной информации — это практика поиска такого содержимого до отправки промпта.
Как конфиденциальные данные попадают в промпты
Редко намеренно. Обычные пути:
- Вставленные логи и трассировки стека, включающие токены, строки подключения или cookie сессий.
- Файлы конфигурации, которыми делятся для отладки:
.env, YAML, Terraform. - Код с жёстко прописанными учётными данными.
- Записи о клиентах в заявках в поддержку, письмах и расшифровках чатов.
- Извлечённые документы, содержащие больше, чем нужно вопросу.
- Файлы промптов в репозитории, где кто-то тестировал с настоящим ключом.
- Результаты инструментов в цикле агента, переданные модели без фильтрации.
Две категории, два вида риска
Секреты дают доступ: ключи API, токены, пароли, закрытые ключи, строки подключения. Утёкший секрет можно использовать сразу. Ответ — отозвать и сменить его.
Персональные данные (PII) идентифицируют людей: имена, адреса электронной почты, номера телефонов, почтовые адреса, номера платёжных карт, номера национальных удостоверений. Их отправка может нарушить ваши обязательства по конфиденциальности или закон, и их нельзя сменить.
Как работает обнаружение
Детекторы сочетают несколько методов, потому что у каждого есть слепые зоны.
Известные форматы. Многие провайдеры выдают ключи с узнаваемым префиксом и длиной. Их можно сопоставлять с высокой уверенностью.
Контекстные шаблоны. Присваивание вроде password = "..." или api_key: ... помечает значение как учётные данные независимо от формата.
Энтропия. Случайные строки имеют высокую энтропию Шеннона. Длинное значение с высокой энтропией рядом со словом «token» или «secret», вероятно, является учётными данными, даже в неизвестном формате.
Структурированные идентификаторы. Адреса электронной почты, номера телефонов и карт следуют шаблонам. Номера карт можно подтвердить контрольной суммой.
Распознавание именованных сущностей. Статистические модели находят имена, организации и места, у которых нет фиксированного шаблона. Больше охват, больше ложных срабатываний, и нужна модель.
Сканер безопасности промптов PromptFlowEngine использует первые четыре. Он детерминирован и работает локально, поэтому текст, проверяемый на секреты, никуда не отправляется для проверки.
Сообщайте места, а не значения
Детектор, который печатает найденный секрет, создал вторую копию секрета — в логе или терминале. Хорошо ведущий себя сканер возвращает только категорию и позицию:
{
"hasSensitiveData": true,
"countsByCategory": { "api_key": 1, "email": 1 },
"matches": [
{ "category": "api_key", "start": 118, "end": 164 },
{ "category": "email", "start": 176, "end": 196 }
]
}
В таком виде PromptFlowEngine возвращает результат во всех интерфейсах. Разобранный пример см. в правиле о конфиденциальных данных.
Скрытие (редактирование)
Скрытие заменяет каждое обнаруженное значение заполнителем, сохраняющим смысл окружающего текста.
Before: Connect with postgres://admin:hunter2@db.internal:5432/app
After: Connect with [REDACTED_CONNECTION_STRING]
Типизированные заполнители вроде [REDACTED_API_KEY] лучше ряда звёздочек: модель по-прежнему знает, что там было, и может рассуждать об этом («строка подключения выглядит неправильно сформированной»), не видя самой строки.
Для персональных данных, на которые задаче нужно ссылаться, используйте согласованные псевдонимы в пределах запроса: каждое вхождение одного адреса электронной почты становится [EMAIL_1], следующий адрес — [EMAIL_2]. Тогда модель может различать людей, а ваше приложение — сопоставить заполнители обратно после ответа.
Где разместить проверку
Обнаруживайте как можно раньше и более чем в одном месте.
| Где | Что перехватывает |
|---|---|
| В редакторе или поле чата | Вставку, до отправки |
| В коде приложения, до вызова API | Данные пользователей, записи и извлечение |
| Между шагами агента | Результаты инструментов, готовые попасть в контекст |
| В CI, на файлах промптов | Учётные данные, закоммиченные в репозиторий |
| Перед логированием | Содержимое, которое вот-вот будет сохранено |
Расширение для Chrome предупреждает, когда черновик в ChatGPT, Claude или Gemini содержит секрет, и может скрыть его на вашем устройстве. Расширение для VS Code запускает защиту приватности перед отправкой промпта в чат, с режимами строгий, скрытие и предупреждение. В CI контрольная точка по умолчанию падает при любой критической находке, так что закоммиченный ключ останавливает сборку.
Варианты политики: блокировать, скрывать или предупреждать
- Блокировать, когда секрет не должен отправляться никогда. Самое безопасное, самое неудобное.
- Скрывать по умолчанию. Промпт уходит без конфиденциальных значений.
- Предупреждать, когда решение должен принять человек, например при возможном ложном срабатывании в коде.
Что бы вы ни выбрали, применяйте обнаружение секретов локально. Проверка, которая отправляет текст удалённому сервису, чтобы выяснить, безопасно ли его отправлять, лишает смысла саму себя.
Ограничения, которые нужно знать
- Ложные пропуски. Секрет в необычном формате или персональные данные без шаблона, например описание человека, могут пройти. Обнаружение снижает риск; оно не удостоверяет, что промпт чист.
- Ложные срабатывания. Хеши, UUID и тестовые фикстуры могут выглядеть как секреты. Вносите известные безопасные значения в список разрешённых, а не отключайте проверку.
- Изображения и файлы. Текстовые сканеры не читают скриншоты или PDF, если их предварительно не преобразовать.
- Контекст. Имя публично в одной ситуации и конфиденциально в другой. Решить это может только ваша политика.
Больше, чем обнаружение: отправляйте меньше
Самый надёжный контроль — вообще не включать данные.
- Передавайте идентификатор и позвольте инструменту найти запись, чтобы модель никогда не видела ненужные ей поля.
- Удаляйте поля до построения промпта.
- Храните учётные данные в приложении и передавайте их инструментам напрямую. Модели никогда не нужен ваш ключ API, чтобы попросить инструмент вызвать API.
- Используйте тестовые данные в примерах и файлах промптов.
Если секрет уже отправлен
- Немедленно отзовите и смените его. Считайте его скомпрометированным.
- Проверьте логи доступа на предмет использования.
- Удалите его из истории репозитория и файлов промптов.
- Добавьте проверку, чтобы тот же путь был перехвачен в следующий раз.
Об окружающей модели угроз см. безопасность промптов. Об атаках, пытающихся извлечь данные, когда они уже в контексте, см. инъекцию промптов.