Токен на скриншоте: как API-ключи утекают без всяких хакеров
Чтобы слить API-ключ, хакер не нужен. Хватит созвона в четверг: вы показываете коллеге, что баг воспроизводится, а половину экрана занимает вкладка с заголовком Authorization: Bearer eyJhbGciOi… целиком.
В отчёте GitGuardian за 2026 год около 28 % инцидентов с секретами случились за пределами кода: в Slack, Jira и Confluence. Авторы отдельно отмечают, что такие ключи обычно пересылают во время срочной починки, когда думать о них некогда. (State of Secrets Sprawl 2026)
Пять бытовых сцен#
Скриншот в тикете. «Вот запрос, вот ошибка». На скриншоте заодно и заголовки, и в них токен. Тикет видят все, у кого есть доступ к проекту, включая подрядчиков.
Демонстрация экрана. На созвоне вы переключаетесь между вкладками, и где-то мелькает окружение с ключами. Созвон записывается, запись лежит в общей папке.
Экспорт коллеге. Коллекцию или окружение отправили файлом, чтобы у коллеги «всё сразу заработало». В файле значения лежат открытым текстом, а файл лежит в чате, пока чат существует.
Команда cURL в чате. Самый удобный способ показать запрос: скопировал, вставил, коллега повторил. Токен едет внутри команды, прямо в строке с -H "Authorization: …".
Публичная ссылка. Коллекцию выложили, чтобы показать партнёру, и забыли, что там живое окружение. В декабре 2024 года исследователи CloudSEK нашли больше 30 000 публичных рабочих пространств Postman, из которых утекали токены доступа, refresh-токены и ключи сторонних API. Одной из причин исследователи называют случайно открытые коллекции и окружения. (CloudSEK) Сейчас Postman по умолчанию проверяет публичные пространства сканером секретов и удаляет найденное, а ключи предлагает держать в локальном хранилище Postman Vault.
Ни в одной из этих сцен никто ничего не взламывал: ключ уходил вместе с тем, что человек хотел показать.

Секретные переменные: звёздочки прячут, но не запирают#
Многие API-клиенты умеют прятать значение переменной за точками или звёздочками: ••••••••. Полезная вещь, если помнить, от чего она защищает.
Точки скрывают значение на экране, и на созвоне или скриншоте его не видно. На диске оно остаётся открытым текстом и спокойно уезжает в экспорт, синхронизацию и бэкап. Получается шторка на окне: с улицы не видно, но дверь не заперта.
Настоящую защиту дают другие вещи: шифрование, хранилище секретов и токены с коротким сроком жизни. Они помогают, даже если файл или его копия уже попали не к тому человеку. Проще всего из этого завести короткоживущий токен, о нём ниже.
В Tetiva так же. Флаг «секрет» у переменной влияет только на то, как значение выглядит на экране. Хранится оно как обычно: в локальной базе открытым текстом, и синхронизируется вместе с остальными переменными. На сервере данные зашифрованы, но сервис их читает, чтобы отдавать вашим устройствам. В документации так и написано: секретность нужна против случайного скриншота и демонстрации экрана, а не против доступа к вашему диску.
Маскировка при этом всё равно помогает: скриншот и созвон как раз две сцены из пяти.
Что инструмент может взять на себя#
Tetiva прячет или вырезает ключи в нескольких местах, где они обычно утекают.
Секретные значения скрыты точками в окне окружений, в подсказке при наведении на переменную и в автодополнении. AI-агентам, которые подключаются к приложению по MCP, секретные значения не отдаются вообще.
Если повторить запрос из истории кнопкой «Повторить», черновик приходит без авторизации: Authorization, Cookie и другие заголовки с учётными данными вырезаны.
Перед публикацией коллекции ссылкой снимок чистится прямо на вашем компьютере, а сканер ищет в описаниях, примерах и скриптах всё, что похоже на ключи. Пока есть предупреждения, кнопка «Опубликовать» ждёт галочку «Проверено». Зачем вообще публиковать коллекцию ссылкой, рассказано в статье про final_v2.
Сканер может пропустить ключ в переменной с именем x, особенно если значение похоже на обычное слово.
Привычки перед тем, как показать экран#
- Держите токены в переменных. Тогда в поле заголовка будет видно
{{token}}, и сам ключ на скриншот не попадёт. Замок спрячет значение ещё и в окне окружений. - Перед созвоном переключитесь на тестовое окружение. Заодно не отправите ничего в прод, об этом у нас есть отдельная история.
- Показывайте на созвоне только окно клиента.
- Если показываете ошибку 500, обрежьте скриншот до ответа: заголовки на нём не нужны.
- Для демо и обучения заведите отдельный токен с коротким сроком жизни.
- Перед тем как вставить команду cURL в чат, замените в ней токен на
<TOKEN>. - Перед тем как отправить экспорт окружения, откройте файл и посмотрите на него глазами.
Если уже утекло#
Удалить сообщение недостаточно: его успели прочитать, оно пришло кому-то уведомлением на почту, его могли процитировать в другом треде. Действуйте по порядку.
- Отзовите ключ и выпустите новый. Это главное: по данным того же отчёта GitGuardian, 64 % ключей, которые утекли в 2022 году и были действующими, работали и в январе 2026-го.
- Замените ключ везде, где он используется: в окружениях, в CI, в конфигах сервисов.
- Попросите владельца сервиса проверить журналы: не пользовался ли ключом кто-то ещё.
- Найдите копии и удалите их: тикеты, треды, записи созвонов, экспорты. Удалять стоит после отзыва ключа, а не вместо него.
- Разберитесь, через какую из пяти сцен ключ ушёл, и заведите для неё привычку из списка выше.
Если сейчас вспомнился конкретный скриншот, проверьте, работает ли ещё тот ключ. Если работает, отзовите.
