Ключи OpenAI API в открытом доступе: почему ими нельзя пользоваться
Откуда берутся «бесплатные» ключи на GitHub, почему пользоваться ими опасно и для вас, и для владельца, и как защитить собственный ключ от такой же утечки.
6 мин · · API-ключи · ошибки
Запросы вроде «openai api key github» и «free openai api keys» ищут ключи, которые когда-то кто-то случайно опубликовал. Соблазн понятен: платить не надо. Но у ключей api openai в открытом доступе есть три проблемы: они чужие, они почти всегда уже не работают, а возня с ними опасна для вас. Ниже объясняем, откуда такие ключи берутся, почему пользоваться ими нельзя, и главное — как не стать тем, чей ключ окажется в такой подборке.
Откуда берутся ключи в открытом доступе
Ключ становится публичным не по воле владельца. Типичные пути утечки:
- Файл
.envили конфиг с ключом попал в коммит и ушёл в публичный репозиторий. - Ключ вписан прямо в код фронтенда или мобильного приложения, и его видно любому, кто откроет страницу или распакует приложение.
- Ключ остался в логе, скриншоте, видео, ноутбуке Jupyter или посте на форуме.
- Ключ был в тексте вопроса, заданного на публичном сайте помощи.
Удаление файла из репозитория не стирает секрет: он остаётся в истории коммитов, и найти его там можно так же легко, как в актуальной версии. Владелец часто даже не замечает утечку, пока не придёт счёт.
Что происходит с таким ключом
Платформы и поставщики моделей сканируют публичные репозитории в поисках секретов, и найденные ключи, как правило, отзываются автоматически или после уведомления владельца. Поэтому опубликованный ключ живёт обычно недолго. Те, что ещё работают, чаще всего принадлежат тем, кто просто не заметил утечку, и они тоже будут отозваны, как только владелец увидит письмо или счёт. Сайты и репозитории с подборкой «бесплатных ключей» в основном собирают уже недействительные значения, а то, что действует, перестанет действовать в любой момент.
Почему пользоваться чужим ключом нельзя
- Это чужие деньги и чужой аккаунт. Каждый ваш запрос списывается с баланса человека, который ничего вам не разрешал. Использование доступа без согласия владельца нарушает условия сервиса и во многих странах может быть квалифицировано как несанкционированный доступ к чужим данным или ресурсам.
- Ваши запросы увидит не тот, кому вы доверяете. Тексты и файлы, которые вы отправляете, проходят через аккаунт владельца и могут быть доступны ему (например, в логах) и его поставщику. Загрузить туда рабочие документы или личные данные значит отдать их постороннему.
- Нестабильность. Ключ может быть отозван в любую секунду, и ваш проект сломается на середине работы.
- Ловушки вокруг самой идеи. Сайты «генераторов бесплатных ключей», архивы «рабочих ключей» и платные «базы ключей» нередко служат приманкой для кражи данных, подписки без возврата или установки вредоносных программ. Не скачивайте и не запускайте ничего подобного.
Если вы случайно нашли чужой ключ, правильное действие — не проверять его запросом, а сообщить владельцу, например через Issue в репозитории, и закрыть страницу.
Как не оказаться владельцем такого ключа
Хорошая новость: от утечки можно застраховаться заранее, и это недолго. Практические шаги:
Храните ключ только вне кода
- Ключ лежит в переменной окружения или в менеджере секретов, а не в исходниках.
.envдобавлен в.gitignoreдо первого коммита. В репозиторий кладите только шаблон.env.exampleбез настоящих значений.- Не вставляйте ключ в код фронтенда и мобильных приложений: всё, что отправляется клиенту, можно прочитать. Вместо этого вызывайте API с вашего сервера.
- Не публикуйте скриншоты и записи экрана, где виден ключ или консоль с ним.
Ловите ошибку до коммита
Подключите проверку на секреты перед коммитом: подойдёт любой сканер секретов, например gitleaks. Он срабатывает локально и в CI и останавливает коммит, если в нём есть строка, похожая на ключ. Настройка занимает несколько минут, детали смотрите в документации самого инструмента.
Ограничьте ущерб от утечки
Это та защита, которая работает, когда всё остальное не сработало. В Zukko можно создать несколько ключей, и у каждого есть:
- имя, чтобы понимать, чей он;
- дневной и месячный лимит в долларах;
- список разрешённых моделей (
allowed_models).
Заведите отдельный ключ под каждый проект и задайте ему реалистичный лимит и только нужные модели. Тогда даже утёкший ключ не сможет потратить больше суммы лимита и не сможет вызвать дорогие модели. Когда лимит исчерпан, API отвечает 429 с кодом key_daily_limit_reached или key_monthly_limit_reached. Подробнее: лимиты ключей и кэш и статья зачем отдельный ключ на проект.
Полный ключ показывается один раз при создании, поэтому сохраните его сразу в менеджер секретов.
Ротация и мониторинг
- Меняйте ключи по расписанию и сразу после ухода сотрудника, имевшего к ним доступ.
- Раз в неделю смотрите историю расходов в разделе «Использование» кабинета: неожиданный скачок первый признак утечки.
- Не передавайте ключи в мессенджерах и по почте открытым текстом.
Если ключ уже утёк
Не откладывайте. Создайте новый ключ, обновите его в настройках сервисов, удалите старый и проверьте историю расходов за последние дни. Пошаговый порядок описан в статье Утёк API-ключ: что делать.
Честная альтернатива «бесплатному» ключу
Если вам нужен доступ к моделям для учёбы или небольшого проекта, платный API с оплатой за токены обходится гораздо дешевле, чем кажется. В Zukko баланс в долларах, пополнение от $1, подписки нет. Цены на 18 октября 2026, $ за 1M токенов. Возьмём условный запрос в 2000 входных и 500 выходных токенов:
deepseek-v4.1-flash(0.013 / 0.038): 2000 × 0.013 / 1M + 500 × 0.038 / 1M = 0.000026 + 0.000019 = $0.000045. На $1 это около 22 000 таких запросов.gpt-6.1-sol(0.27 / 1.32): 2000 × 0.27 / 1M + 500 × 1.32 / 1M = 0.00054 + 0.00066 = $0.0012. На $1 это около 830 запросов.
Это расчёт для примера, реальная стоимость зависит от длины ваших запросов. Актуальные цены — GET https://api.zukko.pro/v1/models или страница «Модели» в кабинете. Оплата: СБП, криптовалюта или карты MasterCard; доступ из России через шлюз. Про то, что реально можно получить без оплаты, мы честно писали в статье Бесплатный API нейросети.
Частые вопросы
Законно ли пользоваться найденным в интернете ключом?
Как правило, нет. Это доступ к чужому аккаунту без разрешения владельца, и он нарушает условия сервиса. Не используйте такие ключи. Точную правовую оценку для вашей страны даст юрист.
Почему найденные ключи не работают?
Платформы сканируют публичные репозитории и отзывают найденные ключи, а владельцы удаляют их сами, когда замечают утечку.
Можно ли просто удалить ключ из репозитория?
Нет, его нужно отозвать. Удаление файла не убирает секрет из истории коммитов, а значит, ключ считается скомпрометированным. Создайте новый и удалите старый.
Достаточно ли лимита на ключе для защиты?
Лимит ограничивает ущерб, но не заменяет остальные меры. Используйте всё вместе: ключ вне кода, сканер секретов, отдельный ключ на проект, лимиты и ротацию.
Чтобы завести ключ с лимитом и списком моделей, откройте раздел ключей в кабинете Zukko.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Ошибки GLM API: почему не работает запрос и как это исправитьНеверный id модели, переполненный контекст 128K, ключ, баланс, лимиты: типичные причины ошибок GLM API и быстрый способ найти свою.
- This organization has been disabled в Claude API: что это и как продолжитьКлюч Anthropic внезапно отвечает «organization has been disabled». Объясняем, что это за ошибка, что проверить и как перенести SDK и Claude Code на другой провайдер.
- Gemini API не работает: регион, ключ, лимиты и имя моделиПошаговая диагностика Gemini API: от проверки статуса и региона до утёкшего ключа, ошибок 429 и 503 и опечатки в имени модели.
- Заголовок с API-ключом: Authorization Bearer или x-api-key — что кудаOpenAI-клиенты шлют ключ в Authorization, Anthropic-клиенты в x-api-key. Разбираем, что принимает шлюз, и как по ответу понять, где именно ключ потерялся.