Содержание
Как убрать ключи и пароли из кода, который пишет нейросеть: файл .env, образец для нейросети, история версий Git и что делать, если ключ утёк.
🔥 Мега распродажа!
• Нейросети: GPT, Claude, Gemini, Grok и DeepSeek
• Картинки: создание и правка фото в чате
• Чтение документов и фото, поиск в интернете
• Около 100 готовых ассистентов и шаблонов
-56%
на весь
функционал
Ключи доступа и пароли, которые нужны программе, хранят вне кода: в файле .env в папке программы или в настройках хостинга. Программа при запуске берёт ключ по имени, например VK_TOKEN, а сам .env остаётся на твоём компьютере или сервере: его не вставляют в переписку с нейросетью и не выкладывают на GitHub или в общую папку хостинга. Имя этого файла вписывают в .gitignore, и тогда программа для хранения версий Git не сохранит его вместе с кодом. Нейросеть получает только образец .env.example: в нём перечислены нужные ключи, но значений нет. Если ключ увидел посторонний, сначала его отключают в настройках сервиса и заводят новый, а код и историю версий чистят потом.
Статья для тех, кто собирает сайт, бота или небольшую программу вместе с нейросетью в чате. Такой способ называют вайб-кодингом: это создание сайтов и программ с помощью нейросети, без ручного написания кода.
Советы мы проверили на стенде, то есть на учебной копии программы выдуманной велосипедной мастерской «Спица»: программа присылает владельцу сообщение о новом заказе от имени сообщества ВКонтакте. Ключ в стенде выдуманный, настоящее сообщество мы не использовали. Три запроса из статьи прогнали на модели Claude и сверили ответы со стендом и с документацией сервисов. Шаги в настройках сервисов описаны по их документации на 16 октября 2026 года.
Запросы из статьи можно вставить в чат сервиса «Нейросети»: там есть Claude, ChatGPT, Gemini и DeepSeek без ВПН и зарубежной карты. Если нужно разобрать свой код, открой ассистента-программиста, только сначала замени в коде ключи словом ЗАГЛУШКА. В сервисе «Нейросети» полный доступ к моделям и ассистентам - по подписке, условия и цены - на странице тарифов.
Что такое ключ доступа и почему его крадут
Ключ доступа работает как пароль, только пользуется им программа. У кого ключ, тот может писать от имени твоего сообщества, управлять ботом или тратить деньги с твоего счёта в сервисе нейросети.
Программы общаются с сервисами через программный интерфейс (API): набор команд, которые сервис принимает от других программ. Чтобы сервис понял, чья это программа, к каждой команде прикладывают ключ. Его ещё называют токеном. Примеры из малого бизнеса:
- ключ сообщества ВКонтакте: с ним программа пишет подписчикам от имени сообщества;
- ключ бота в Телеграме: кто его знает, тот управляет ботом;
- пароль приложения для почты: с ним программа отправляет письма с твоего адреса;
- секретный ключ платёжного сервиса: с ним программа создаёт счета;
- ключ к нейросети: каждый запрос по нему оплачивается с твоего счёта.
GitHub - сайт, где хранят код и выкладывают его в открытый доступ. По отчёту компании GitGuardian, за 2025 год в открытых проектах на GitHub нашли 28 649 024 новых секрета (так в отчёте называют ключи, пароли и другие строки доступа), на 34% больше, чем годом раньше. Утечек ключей к сервисам искусственного интеллекта стало 1 275 105, рост за год 81%. Там же сказано, что 64% действующих секретов, найденных в 2022 году, в 2026 году так и не отозваны, то есть не отключены в настройках сервиса. Почти все эти ключи никто не взламывал: владельцы выложили их сами, вместе с кодом.
Где ключ хранить нельзя, а где можно
Нельзя: в коде, в коде страницы сайта, в сообщениях в чатах и в журнале работы программы. Можно: в файле .env рядом с программой и в настройках хостинга.
| Где | Можно ли | Почему |
|---|---|---|
| Прямо в коде программы | Нельзя | Код пересылают и выкладывают на GitHub и хостинг, ключ уходит вместе с ним |
| В коде страницы сайта | Нельзя | Браузер скачивает код страницы целиком, и любой посетитель может его прочитать |
| В сообщении в чате с нейросетью или в мессенджере | Нельзя | Ты не управляешь тем, где хранится переписка, а нейросеть может повторить ключ в ответе |
| В журнале работы программы и в тексте ошибок | Нельзя | Журналы пересылают при поиске ошибок, иногда они лежат на общем сервере |
| В файле .env рядом с программой | Можно | Файл остаётся на твоём компьютере или сервере, Git его не видит, если имя файла вписано в .gitignore |
| В настройках хостинга, в разделе переменных окружения | Можно | Ключ задают в панели, в файлах проекта его нет совсем |
Как попросить нейросеть писать код без ключа внутри
Не вставляй ключ в чат. Добавь к запросу на код короткие правила: ключи только из .env, образец .env.example, файл .gitignore, понятная ошибка без ключа. В нашей проверке модель выполнила все пять правил.
Ключ обычно попадает в код из разговора: «Сделай бота, вот мой ключ». Так мы и поставили задачу модели Claude: функция для «Спицы», которая пишет владельцу о новом заказе от имени сообщества ВКонтакте, и выдуманный ключ прямо в сообщении.
Без правил модель справилась лучше, чем мы ожидали: программа берёт ключ из переменной окружения, то есть из настроек, которые система передаёт программе при запуске, и в файле кода ключа нет. Но в инструкции по запуску модель повторила ключ дословно и не создала файлы .env и .gitignore. Без ключа такая программа упала бы с непонятной ошибкой KeyError: так Python сообщает, что не нашёл нужное значение.
Ту же задачу с правилами ниже модель решила полностью. Ключ ушёл в .env, рядом появились образец .env.example и .gitignore, а без ключа программа останавливается со словами «Не задана переменная окружения VK_GROUP_TOKEN. Заполни её в файле .env». Ключ из сообщения модель в ответе не повторила и напомнила заменить его в настройках сообщества. Правила можно копировать в начало любого запроса на код:
Телефоны покупателей, их имена и переписка тоже не для чата с нейросетью: закон считает это персональными данными.
Данные клиентов и закон о персональных данных: подробно в разделе 7 руководства «Вайб-кодинг для бизнеса»
Там разобрано, какие данные клиентов не отправлять в чат с нейросетью, как сделать образец таблицы с выдуманными строками для проверки программы, какие общие требования закона касаются формы заявки и бота и что сделать до запуска.
Как завести файл .env, образец .env.example и .gitignore
В папке программы три файла: .env с настоящим ключом, .env.example с пустыми значениями для нейросети и помощников и .gitignore со строкой .env. Программа читает ключ при запуске.
Файл .env задаёт переменные окружения для одной программы. Это обычный текстовый файл: в каждой строке имя и значение через знак равенства. Проще всего писать без кавычек и без пробелов вокруг знака:
- Создай .env в папке программы. Имя начинается с точки, расширения у файла нет. Блокнот может дописать к имени .txt, и программа файл не найдёт, поэтому при сохранении выбери тип «Все файлы».
- Создай .env.example с теми же именами и пустыми значениями. Его можно показывать нейросети и помощникам: по нему видно, какие ключи нужны программе, а самих ключей там нет.
- Создай .gitignore и впиши в него строку .env. Сделай это до первого сохранения версии в Git, иначе файл с ключом окажется в истории.
- Попроси нейросеть читать ключ из .env. Для программ на Python есть библиотека python-dotenv: строка load_dotenv() загружает файл, а os.getenv("VK_TOKEN") достаёт ключ. Если ключ задан и в системе, и в .env, библиотека по умолчанию возьмёт системный. В Node.js с версии 20.6.0 файл подключают при запуске: node --env-file=.env app.js.
- Проверь, что Git не видит .env. Открой терминал (окно для команд) в папке проекта и набери git status --short --ignored. Файл, который Git не сохраняет, помечен двумя восклицательными знаками.
На стенде «Спицы» мы перенесли ключ из кода в .env. Git перестал видеть файл с ключом, программа прочитала ключ и отправила запрос.
На хостинге не клади .env в корневую папку сайта: всё, что лежит в ней, сервер может отдать любому посетителю по адресу. Что такое корневая папка и как загружать файлы, разобрано в статье о том, как выложить сайт в интернет. Если в панели хостинга есть раздел переменных окружения, ключ надёжнее задать там.
Почему .gitignore не спасает ключ, который уже попал в Git
Git хранит все прошлые версии файлов. Если ключ хоть раз сохранили в версию, он остаётся в истории, даже когда в текущем коде его уже нет. Такой ключ уже нельзя считать тайным, его заменяют на новый.
Git запоминает каждую сохранённую версию проекта, и если выложить проект на GitHub в открытый доступ, там видна вся его история. Два частых случая мы воспроизвели на двух проектах Git у себя на компьютере, ничего не выкладывая в интернет.
Ключ сначала был в коде. Мы сохранили версию, где ключ вписан прямо в программу, потом перенесли его в .env и сохранили новую версию. В текущих файлах ключа нет, но поиск по истории находит его в первой версии:
Файл .env сохранили в Git до того, как появился .gitignore. Мы добавили .gitignore позже, но Git продолжил следить за .env и показывать его изменения. Так и написано в документации Git: файлы, за которыми Git уже следит, .gitignore не затрагивает. Помогла команда git rm --cached .env и новое сохранение версии: Git перестаёт следить за файлом, а сам файл остаётся на диске. Старая версия с ключом при этом всё равно осталась в истории.
Поэтому ключ, который хоть раз попал в историю версий, а тем более на GitHub, заменяют на новый. Историю можно переписать специальными программами, но документация GitHub первым шагом называет отзыв ключа: копии проекта у других людей переписанная история не затронет. В открытых проектах GitHub сам ищет известные виды ключей, а часть из них не даёт даже отправить на сайт. Эта проверка знает не все сервисы, и ключа ВКонтакте среди них мы не нашли.
Где ещё ключ увидит посторонний
Кроме кода ключ утекает через адрес запроса, сообщения об ошибках и журнал работы программы, а у сайта - через код страницы, который скачивает браузер.
В стенде «Спицы» мы нарочно оставили такую ошибку: при сбое программа печатает целиком адрес запроса, то есть адрес, по которому она обращается к ВКонтакте, вместе с ключом. Мы запустили её с выдуманным ключом. ВКонтакте ответил «User authorization failed: invalid access_token» (вход не выполнен: неверный ключ), а программа вывела на экран адрес с ключом внутри. Если программа работает на сервере, эта строка уходит в журнал.
Так бывает и без ошибки в своём коде: на vc.ru описан случай, когда ключ бота три с половиной месяца записывался в журнал, потому что адрес запроса вместе с ключом печатала библиотека для запросов. Найти такие места поможет запрос:
Модель Claude нашла в стенде все три места: ключ в адресе запроса, печать адреса при ошибке и ключ, вписанный в файл. Лишних находок не было. Ключ она предложила перенести из адреса в заголовок запроса, служебную часть, которая в адресе не видна. Мы проверили, что ВКонтакте читает ключ оттуда: с выдуманным ключом в заголовке сервер ответил «invalid access_token» (неверный ключ), а без ключа совсем - «Access denied: token required» (доступ запрещён: нужен ключ).
Отдельный случай - сайт без своего сервера, например страница из одного файла. Всё, что написано в коде страницы, браузер скачивает целиком. Мы вписали выдуманный ключ в такую страницу, и он нашёлся в первом же ответе сервера, обычным поиском по тексту. В справке Google к нейросети Gemini сказано: не вписывай ключ в код сайта или мобильного приложения.
Страница вроде той, что мы собирали в статье о том, как сделать сайт с помощью нейросети, ключей не содержит, и так должно остаться. Если на сайте нужен чат с нейросетью или оплата, ключ хранится на сервере, а страница обращается к серверу.
Что делать, если ключ утёк
Сначала отзови ключ и выпусти новый в настройках сервиса, потом замени его в программе, потом проверь, не успели ли им воспользоваться. Стереть сообщение или файл мало: копия ключа могла уже уйти к другому человеку.
Как это выглядит со стороны: учебный бот в Телеграме вдруг стал присылать на каждое сообщение чужую рекламу. Автору вопроса на «Ответах Mail» объяснили, что ключ бота, скорее всего, лежал в открытом проекте и ботом управляет кто-то другой.
Ключ считай утёкшим, если он побывал в открытом проекте, в общем чате, на снимке экрана, в журнале, который ты кому-то отправлял, или в истории версий. Порядок действий у всех сервисов один, отличаются только кнопки:
- Отзови старый ключ и выпусти новый в настройках сервиса.
- Впиши новый ключ в .env или в настройки хостинга и перезапусти программу.
- Проверь, не успели ли воспользоваться старым ключом: записи и сообщения от твоего имени, расходы, письма от сервиса.
| Сервис | Где заменить ключ | Что учесть |
|---|---|---|
| Сообщество ВКонтакте | Управление сообществом, раздел «Работа с API» (в новом меню он может находиться внутри «Дополнительно»): удалить старый ключ и создать новый | Ключей может быть несколько с разными правами. Сервисы, которые работали со старым ключом, перестанут работать, пока не вставишь новый |
| Бот в Телеграме | @BotFather, команда /token: выпустить новый ключ (токен) | По документации Телеграма, любой, кто знает ключ, может управлять ботом |
| Платёжный сервис ЮKassa | Личный кабинет, раздел «Интеграция - Ключи API», перевыпуск ключа | После перевыпуска старый ключ работает ещё 48 часов. Если ключ утёк, спроси поддержку, можно ли отключить его раньше |
| Яндекс Почта | Яндекс ID: «Безопасность», «Доступ к вашим данным», «Пароли приложений», кнопка «Удалить пароль» | Программе нужен пароль приложения: по справке Яндекса, он не даёт доступа к самому аккаунту |
| Ключ к нейросети (OpenAI, Anthropic, Google) | Кабинет разработчика, раздел ключей: удалить старый, создать новый | Проверь расходы за последние дни и поставь лимит трат, если сервис это позволяет |
Пункты меню в таблице взяты из документации и справок сервисов на 16 октября 2026 года, сами мы ключи в этих сервисах не перевыпускали. Если кнопка выглядит иначе, ищи в справке сервиса по словам «ключ доступа» или «токен». Составить план под свой случай поможет запрос:
Модели Claude мы описали случай: ключ сообщества был в коде бота, проект два дня провисел открытым на GitHub. В её плане первым шагом шло закрытие проекта, вторым - удаление ключа и создание нового с минимальными правами. Модель сама оговорила, что закрытие проекта без замены ключа не поможет, отметила места, где не уверена в названиях кнопок, и дала ссылку на справку ВКонтакте. Документация GitHub ставит замену ключа первой, и мы советуем тот же порядок. Кнопки и сроки из плана нейросети сверяй со справкой сервиса.
Как снизить ущерб заранее
Ограничь права каждого ключа, заводи отдельный ключ под каждую программу, ставь лимиты трат и храни свои пароли в менеджере паролей с двухфакторной защитой.
- Минимум прав. Если программа только пишет владельцу о заказах, ключу сообщества хватит прав на сообщения, управлять сообществом ему не нужно.
- Отдельный ключ под каждую программу. ВКонтакте позволяет создать несколько ключей с разными правами. Утёк один - отключаешь только его, остальное работает.
- Лимиты трат у нейросетей. Если сервис позволяет поставить лимит расходов, поставь его. У одних сервисов лимит останавливает траты, у других только присылает предупреждение, поэтому проверь в справке, как он работает.
- Свои пароли - в менеджере паролей, то есть в программе, которая запоминает пароли за тебя. Для хостинга, почты и аккаунта ВКонтакте заведи разные пароли: «Лаборатория Касперского» советует пароли не короче 12 символов и ни один не использовать дважды. Для входа включи второй шаг проверки, надёжнее всего код из приложения-аутентификатора.
Какие нейросети лучше справляются с кодом, мы сравнивали в обзоре нейросетей для написания кода, и правила из этой статьи подходят к любой из них.
Частые вопросы
Можно ли отправить ключ нейросети, чтобы она сама вписала его куда надо?
Лучше не надо. Отправь код с заглушкой вместо ключа и образец .env.example, а настоящий ключ впиши в .env сам. Если ключ уже ушёл в чат, выпусти новый.
Я удалил файл с ключом из проекта. Теперь ключ в безопасности?
Нет, если файл хоть раз попал в историю версий Git или на GitHub. Старая версия хранится в истории, и её могли скопировать. Отзови ключ и создай новый.
Чем .env отличается от .env.example?
В .env лежат настоящие ключи, его не отправляют никуда. В .env.example те же имена с пустыми значениями. Он нужен, чтобы нейросеть и помощники понимали, какие ключи ждёт программа.
GitHub сам предупредит, если я выложу ключ?
Иногда. GitHub ищет в открытых проектах известные виды ключей и некоторые из них не даёт отправить. Проверка знает не все сервисы, поэтому полагайся на .gitignore и на свою проверку перед публикацией.
Что делать, если токен бота в Телеграме утёк?
Выпусти новый ключ в @BotFather командой /token, как советует документация Телеграма, впиши его в .env или в настройки хостинга и перезапусти бота. Потом проверь, не рассылал ли бот чужие сообщения и не поменялись ли его имя, описание и команды.
Где хранить ключ, если программа работает на хостинге?
В разделе переменных окружения в панели хостинга, если он есть, или в файле .env вне корневой папки сайта. Из корневой папки сервер может отдать файл любому посетителю.
Источники
- Отчёт о секретах в открытом коде за 2025 год (GitGuardian)
- Пресс-релиз отчёта о секретах, 17 марта 2026 года (GitGuardian)
- Документация Git: файл .gitignore
- Удаление чувствительных данных из проекта (документация GitHub)
- Как безопасно хранить секреты (документация GitHub)
- Поиск секретов в проектах (документация GitHub)
- Защита от отправки секретов (документация GitHub)
- Библиотека python-dotenv (PyPI)
- Параметр --env-file (документация Node.js)
- Ключ доступа сообщества ВКонтакте (блог ВКонтакте на Хабре)
- Что происходит после удаления ключей сообщества (справка Senler)
- Ключ бота и команда /token (документация Telegram)
- Секретный ключ и его перевыпуск (справка ЮKassa)
- Пароли приложений (справка Яндекс ID)
- Как обращаться с ключом Gemini (документация Google)
- Безопасность ключей Claude (справка Anthropic)
- Памятка по управлению секретами (OWASP)
- Простые советы по безопасности паролей («Лаборатория Касперского»)
- Бот присылает чужую рекламу (вопрос на «Ответах Mail»)
- Ключ бота месяцами писался в журнал (vc.ru)
Здесь мы вынесли ключи из кода и журнала и разобрали, что делать, если ключ утёк, а в руководстве есть и другие шаги проекта: как проверить результат работы нейросети, выложить проект в интернет и искать первых клиентов.
- 10 этапов: идея, проверка спроса, постановка задачи нейросети, инструменты, первый проект, проверка результата, безопасность и закон о персональных данных, публикация, первые клиенты, развитие
- 26 готовых запросов к нейросети и объяснение, как менять их под свою задачу
- Три примера пошагово: сайт, бот для сообщества во ВКонтакте, недельный отчёт
- Какие сервисы доступны из России: сведения на 12 октября 2026 года, со ссылками на источники
🔥 Мега распродажа!
• Нейросети: GPT, Claude, Gemini, Grok и DeepSeek
• Картинки: создание и правка фото в чате
• Чтение документов и фото, поиск в интернете
• Около 100 готовых ассистентов и шаблонов
-56%
на весь
функционал