Технологии

Хранение секретов и токенов: .env и безопасность

10 минАктуально на 19 июля 2026

Хранение секретов и токенов

Типичная история: ты опубликовал «Змейку» на GitHub Pages, подключил таблицу рекордов в Supabase и гордишься результатом. Через пару часов приходит письмо: «Мы обнаружили ваш API-ключ в публичном репозитории». Или ещё хуже — в облачном кабинете появляются незнакомые запросы, а счёт за базу данных резко вырос. Такое случается, когда секретный токен случайно попадает в код, который виден всему интернету. Разберёмся, что такое токены и секреты, почему их нельзя отправлять в GitHub, как прятать их в файле .env и что делать, если ключ всё-таки утёк.

Содержание
  1. Что такое токен и секрет
  2. Почему токены нельзя коммитить
  3. Что такое .env и .gitignore
  4. Как ИИ-ассистент прячет ключи
  5. Что делать, если токен утёк
  6. Практический чек-лист
  7. Заключение
  8. Источники

Что такое токен и секрет

Токен — это длинная случайная строка, которая заменяет логин и пароль при обращении к сервису. Если пароль обычно нужен, чтобы войти в личный кабинет глазами человека, токен нужен программе — например, твоей игре — чтобы получить доступ к базе данных или облачному хранилищу.

Секрет — более широкое понятие. Это любая конфиденциальная информация, которую нельзя показывать посторонним: API-ключи, пароли от базы данных, токены доступа, приватные ключи шифрования.

Проще говоря, токен — как ключ от подъезда. Если его сфотографировать и выложить в соцсети, любой сможет зайти. В цифровом мире «подъезд» — это сервер Supabase, почтовый сервис или облачное хранилище.

Почему токены нельзя коммитить

Когда ты делаешь git commit и отправляешь код на GitHub, каждая строка сохраняется в истории. Если репозиторий публичный — его видит весь интернет, включая ботов, которые специально ищут случайно опубликованные ключи.

GitHub запускает автоматическое сканирование секретов в публичных репозиториях. Если система находит известный формат ключа — например, от Supabase, OpenAI, AWS или Slack — она может уведомить владельца и даже автоматически связаться с провайдером сервиса. Провайдер, в свою очередь, часто отключает ключ, чтобы злоумышленник не успел им воспользоваться.

Но боты работают быстрее. Исследования безопасности неоднократно показывали, что токены, опубликованные в открытом доступе, находят и пробуют использовать в течение минут. Злоумышленники могут:

  • читать и изменять данные твоих пользователей;
  • удалить базу данных или весь проект;
  • рассылать спам через подключённый почтовый сервис;
  • накрутить расходы на платных API вроде OpenAI или облачных хранилищ.

Даже если репозиторий приватный, коммитить ключи — плохая привычка. Когда-нибудь репозиторий могут случайно открыть, или к нему получит доступ другой человек, или ты скопируешь код в публичный пример. Правило простое: секреты не живут в коде.

Что такое .env и .gitignore

Файл .env — это обычный текстовый файл, в котором хранятся переменные окружения. Для программы это «настройки извне»: игра запускается, читает значения из .env и использует их, но сам файл не попадает в GitHub.

Пример файла .env для «Змейки» с Supabase:

SUPABASE_URL=https://abcdefgh12345678.supabase.co
SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

А в коде программа обращается к ним так:

const supabaseUrl = process.env.SUPABASE_URL;
const supabaseKey = process.env.SUPABASE_ANON_KEY;

Чтобы .env не улетел на GitHub, в той же папке создаётся файл .gitignore. Это список файлов и папок, которые Git должен игнорировать. Достаточно добавить туда одну строку:

.env

После этого Git перестаёт отслеживать .env, и при публикации репозитория он не попадёт ни в код, ни в историю коммитов.

💡

Важно: .env хранится локально на твоём компьютере. Если ты работаешь на другой машине или коллега клонирует репозиторий, ему нужно создать свой .env вручную. Поэтому удобно держать в репозитории файл .env.example с пустыми или фиктивными значениями — чтобы было понятно, какие переменные нужны.

Как ИИ-ассистент прячет ключи

В курсе ты не пишешь код руками — ты даёшь задачу ИИ-ассистенту, а он генерирует файлы. Хороший промпт на подключение Supabase звучит примерно так: «Подключи Supabase к проекту, вынеси ключи в переменные окружения, добавь .env в .gitignore и объясни, какие значения мне вписать».

ИИ обычно делает следующее:

  1. Создаёт файл .env и записывает туда ключи.
  2. Правит код так, чтобы он читал ключи из переменных окружения.
  3. Добавляет .env в .gitignore.
  4. Создаёт .env.example с названиями переменных, но без настоящих значений.
  5. Проверяет, что .env не попал в индекс Git.

Но ИИ не всесилен. Он действует по твоей задаче, поэтому важно самому проверять результат. Перед каждым коммитом смотри в Git-интерфейсе: не оказались ли в изменениях строки вроде api_key, token, password или длинные случайные наборы символов.

⚠️

Никогда не копируй настоящие ключи в чат с ИИ. Если ассистент предлагает вставить токен — вставляй его только в локальный .env, а в промпте указывай: «используй переменную окружения, реальное значение не пиши».

Что делать, если токен утёк

Если ты обнаружил ключ в публичном репозитории, действуй быстро:

  1. Отзови или смени ключ. Зайди в кабинет сервиса — Supabase, OpenAI, GitHub или любого другого — и создай новый ключ, а старый отключи. Это главный шаг: после отзыва старый ключ становится бесполезным.
  2. Проверь журнал активности. В кабинете сервиса посмотри, не было ли подозрительных запросов в период между публикацией и отзывом.
  3. Удали ключ из кода. Удали строку с токеном из файлов проекта.
  4. Удали ключ из истории Git. Простое удаление из текущего файла не удаляет его из старых коммитов. Используй инструменты вроде git filter-repo или обратись к документации GitHub по удалению конфиденциальных данных из истории.
  5. Перепроверь .gitignore. Убедись, что .env и другие файлы с секретами действительно игнорируются.
  6. Замени ключ в локальном .env. После генерации нового ключа вставь его в свой локальный файл.
⚠️

Не пытайся просто «замазать» ключ новым коммитом. История Git хранит всё, и любой может открыть старый коммит и найти токен. Нужно либо переписать историю, либо — в крайнем случае — удалить репозиторий и создать новый.

Практический чек-лист

  • Все ключи, токены и пароли вынесены в .env.
  • Файл .env добавлен в .gitignore.
  • В репозитории есть .env.example с названиями переменных, но без реальных значений.
  • Перед каждым коммитом проверяешь, что секреты не попали в изменения.
  • Не копируешь настоящие токены в чаты с ИИ.
  • Знаешь, где в кабинете сервиса отозвать ключ при утечке.
  • Включено двухфакторное подтверждение в облачных сервисах.

Заключение

Секреты — это не просто «ещё одна строчка в коде». Это ключи от твоего проекта, данных и иногда денег. Правильное хранение токенов в .env и исключение этого файла из Git — базовая привычка, которая отделяет безопасное приложение от публичной катастрофы.

В контексте курса это особенно важно: в Модуле 3 ты публикуешь «Змейку» на GitHub Pages, а в Модуле 5 подключаешь Supabase для общей таблицы рекордов. Оба шага связаны с публичным кодом и облачными сервисами. Если сразу настроить .env и .gitignore, дальше можно сосредоточиться на игре, а не на устранении утечек.

💡

Запомни: код на GitHub — как витрина магазина. Всё, что там лежит, видно миру. Секреты храни в задней комнате, в файле .env, который никогда не попадает на витрину.

Источники

  1. GitHub Docs — «Removing sensitive data from a repository»: docs.github.com
  2. Supabase Docs — «Environment Variables»: supabase.com/docs/guides/functions/secrets
  3. OWASP — «Secrets Management Cheat Sheet»: cheatsheetseries.owasp.org

Читай дальше

Все статьи

Не просто статьи — тебя доведут до результата

В практикуме за 1999 ₽ рядом живая команда практикующих разработчиков и маркетологов: ведём по шагам до твоего работающего приложения. Не «ролики и сам разбирайся» — помогаем на каждом затыке.

Перейти к практикуму
Все статьи Ещё: технологии и архитектура