Глоссарий
Что такое .env — что происходит при утечке файла окружения
.env собирает секреты приложения (учётные данные БД, ключи API, ключи шифрования) в одном файле. Почему это самый опасный файл, что разблокирует каждый утёкший секрет, куда его класть и как защитить в git и через ротацию — с самопроверкой.
.env крайне удобен, и почти каждый современный фреймворк его использует. Но положите его не туда хоть раз — и это всё равно что приколоть связку ключей к входной двери. Разберём, что это и как его защитить, с нуля.
Чуть подробнее
У приложений есть «значения, меняющиеся от окружения к окружению» и «значения, которые никто не должен видеть»: пароль БД, внешние ключи API, ключ, шифрующий сеансы. Зашейте их в исходный код — и секреты утекут в тот момент, когда вы поделитесь кодом.
Поэтому вы собираете их в один файл .env и читаете из кода как «переменные окружения». Next.js, Laravel, Rails и многие фреймворки работают так.
Почему это «самый опасный файл»
Поскольку несколько ключей лежат в одном файле, единственное раскрытие быстро разносит ущерб. Перечисление «что разблокирует каждое утёкшее значение» делает серьёзность наглядной.
| Утёкшее значение | Что происходит |
|---|---|
| Учётные данные БД | чтение / изменение / стирание данных |
| Внешние ключи API | использование от чужого имени, мошеннические списания |
Ключ шифрования (например, Laravel APP_KEY, ключи подписи) | подделка сеанса, вход от чужого имени |
| Секреты OAuth | захват связанных приложений |
И правда, раскрытие .env — классический инцидент. → .env, открытый всему миру
Типичная утечка = ошибка размещения
Главная причина — «класть всё приложение в публичную директорию (docroot)». Там, где обслуживаться должен только public/, раскрытие его родительской папки делает .env тоже достижимым.
✗ Опасно (приложение в публичном корне)
public_html/ ├─ .env ← читается! ├─ app/ └─ public/
✓ Безопасно (приложение снаружи, обслуживается только public)
app-root/ ├─ .env ← недостижим ├─ app/ └─ public_html/ → public/
Как его защитить
Не кладите его в публичную директорию
Держите приложение вне docroot; обслуживайте только public/. Конкретные шаги для шаред-хостинга: это руководство.
Не коммитьте его в git
Добавьте .env* в .gitignore и делитесь только .env.example с пустыми значениями.
Ротируйте всё, если он утёк
Не только подтверждённый ключ — замените каждый ключ, что был в .env. Действуйте так, будто видели все.
Регулярно делайте самопроверку
Выработайте привычку проверять, что /.env нельзя открыть на вашем собственном сайте.
Самопроверка (только против доменов, которыми вы владеете)
# 200 с телом означает, что он раскрыт. 403/404 — пока в порядке.
curl -sI https://yourdomain/.env | head -1
curl -sI https://yourdomain/.git/config | head -1Проверка этого при каждом деплое рано ловит ошибки размещения.
Читать дальше
FAQ
QМожно ли коммитить .env в git?
Нет. Добавьте .env в .gitignore. Вместо этого закоммитьте .env.example с пустыми значениями, чтобы поделиться тем, какие ключи нужны.
QЕсли из .env утечёт хотя бы один секрет, что я ротирую?
Не только тот, который вы подтвердили, — ротируйте каждый ключ, что был в .env. Приоритет: внешние API / секреты OAuth → ключи шифрования → почта → БД. Действуйте так, будто видели все.
QКак проверить, не утёк ли .env?
Откройте https://yourdomain/.env в браузере. Если содержимое показывается — он раскрыт (200 с телом = плохо). Если он заблокирован (403/404), пока вы в порядке.