Руководства по безопасности
Основы безопасности: чем на самом деле опасны .env и API-ключи
Первый шаг для инди-разработчиков, которые постоянно слышат «безопасность важна», но не знают, с чего начать. Что такое .env, что происходит при утечке API-ключа (со схемой потока) и минимум из четырёх привычек, которые можно завести сегодня — объяснено просто, без страха, на практике.
«Постоянно слышу, что безопасность важна, но с чего вообще начать?» Это самый первый шаг для инди-разработчиков. Не чтобы напугать — только то, на что можно действовать сегодня, по порядку.
Почему начинать с «секретов»
Большинство реальных инцидентов начинаются не с изощрённых атак, а с утёкшего секрета. Оба случая, на которых построен этот сайт, были утечками секретов:
Защитите свои секреты — и предотвратите большинство частых инцидентов. Поэтому начинаем здесь.
Что такое .env (за 30 секунд)
.env — это файл, собирающий секретные значения вашего приложения: пароль базы данных, внешние API-ключи, ключ, шифрующий сессии. Поскольку ключи лежат вместе в одном файле, утечка проливает их все разом — поэтому это файл, который надо охранять первым (→ Глоссарий: Что такое .env).
Что означает утечка API-ключа
API-ключ — это «запасной ключ, чтобы пользоваться сервисом от вашего имени». В чужих руках он выстраивается в цепочку так.
Украденные ключи часто перепродают и используют с задержкой — «сначала ничего не происходит, потом внезапный счёт» — классический паттерн. Поэтому «после того как заметите» уже поздно; суть в том, чтобы изначально не допустить утечки.
Четыре привычки, чтобы начать сегодня
Ничего сложного. Всего четыре.
Не выставляйте наружу
Никогда не помещайте .env или тело приложения в директорию, видимую из веба (веб-корень). Выставляйте только public/. Конкретные шаги для шаред-хостинга: это руководство.
Не коммитьте
Добавьте .env* в .gitignore (разрешив !.env.example); делитесь только обезличенным примером. Раз закоммитив, его можно восстановить из истории, так что держите его вне с самого начала.
Меняйте всё при утечке
Не только один ключ — меняйте каждый секрет, который мог утечь. По порядку: внешние API / OAuth → ключи шифрования → почта → БД. Действуйте так, будто их видели.
Самопроверка
Время от времени убеждайтесь, что /.env нельзя открыть снаружи (ниже).
Самопроверка (только против доменов, которыми вы владеете)
# 200 с телом означает, что выставлено наружу. 403/404 пока нормально.
curl -sI https://your-domain/.env | head -1
curl -sI https://your-domain/.git/config | head -1Проверка этого при каждом деплое рано ловит ошибки размещения.
Частые ошибки против правильного первого шага
Частое
- «Работает же», и
.envкладут прямо под public - «Потом удалю», и
.envодин раз коммитят - Меняют только тот ключ, по которому видели злоупотребление
Правильный первый шаг
- Тело приложения вне веб-корня, выставлять только
public/ - Исключить
.envчерез.gitignoreс самого начала - При утечке сменить каждый секрет в окружении
Следующие шаги
Дальше следующие темы — «рискованные значения по умолчанию в вашем стеке» и «система, чтобы не отставать от опубликованных CVE». Не спешите, по одной за раз.
Читать дальше
- Глоссарий: Что такое .env · Что такое CVE · Что такое RCE
- Защита: Держите .env вне публичного веба · Гигиена CVE в Next.js
- Инцидент: Украденный API-ключ и мошеннические счета
- Инцидент: украденный ключ привёл к бану аккаунта
FAQ
QС чего начать в безопасности?
С того, чтобы не допускать утечки своих секретов (.env и API-ключей). Большинство реальных инцидентов начинаются там. Не выставляйте их наружу, не коммитьте в git, при утечке меняйте всё, и время от времени самопроверяйтесь — это предотвращает большую часть.
QЧто конкретно происходит при утечке API-ключа?
Кто-то может действовать от вашего имени по отношению к внешнему сервису. Частые исходы — мошеннические счета (тяжёлое использование списывается на вас) и чтение/запись ваших данных. Украденные ключи часто перепродают и используют с задержкой.
QМожно ли класть .env в git?
Нет. Добавьте .env* в .gitignore и делитесь только обезличенным .env.example. Раз закоммитив, его можно восстановить из истории git даже после того, как вы позже удалите.