Кейс · CLI-утилита · Go
envguard: линтер и сейф .env-файлов
CLI на Go без внешних модулей: check сверяет .env со схемой, scan ищет секреты в дереве и git-истории, diff и doctor проверяют окружения и git-гигиену, seal и unseal шифруют .env в .env.sealed (AES-256-GCM, PBKDF2 600 тыс. итераций), run запускает команду с чистым окружением, report и serve строят отчёт. Значение секрета не попадает ни в вывод, ни в лог, ни в HTML. Пет-проект.
- Go
- stdlib only
- CLI
- AES-256-GCM
- PBKDF2
- fuzzing
- govulncheck
- gitleaks
- GitHub Actions
- Docker
01 · Как выглядит
Скриншоты


02 · О проекте
Что это и зачем
envguard — консольная утилита на Go для .env-файлов: сверяет их со схемой, ищет секреты в рабочем дереве и git-истории, шифрует .env в .env.sealed и запускает команды с чистым окружением. Пет-проект.
Один бинарник и только стандартная библиотека Go (go.sum нет). Главное правило проекта: значение секрета не попадает ни в вывод, ни в лог, ни в ошибку, ни в HTML, ни в JSON. Печатается тип находки, файл, строка и маска из четырёх символов (для значений от 12 символов), для коротких только длина; это проверяется тестами с «канареечными» значениями по выводу каждой команды.
Ограничения
Живой версии нет: это консольная утилита.
В Go нельзя гарантированно затереть секрет в памяти: буферы фразы и ключа затираются, но значения переменных живут в строках до сборки мусора. Дампы памяти и swap остаются в модели нападающего.
Сканер находит известные форматы и подозрительные значения; секрет произвольного вида, закодированный или лежащий в бинарном файле, будет пропущен, а эвристики дают ложные срабатывания. История git проверяется ограниченно: последние N коммитов.
PBKDF2 слабее по GPU-стойкости, чем scrypt и Argon2: это цена отказа от внешних модулей. Проверка -race выполняется только в CI, права файлов на Windows не проверяются.
Что внутри
- check: сверка .env с .env.example и схемой envguard.schema (типы int, bool, url, duration, enum, port, secret, string, диапазоны, дубли, кавычки, CRLF и BOM)
- scan: секреты известных форматов (AWS, GitHub, Cloudflare, Stripe, Slack, Google, PEM-ключи, JWT, пароль в URL) и две эвристики; исключения через envguard:ignore и .envguardignore
- diff сравнивает окружения за постоянное время и печатает только факт изменения и длины; doctor проверяет .gitignore, отслеживание в git, права файла и историю
- seal и unseal: AES-256-GCM, ключ из парольной фразы через PBKDF2 (600 тыс. итераций), заголовок как AAD; run запускает команду с расшифрованным окружением без записи на диск, с блок-листом и маскированием вывода
- report и serve: отчёт в HTML и на 127.0.0.1 без значений переменных, строгий CSP, проверка Host и Origin
- Тесты: таблицы, golden-файлы, канарейки, property-тесты seal, 4 fuzz-цели по 20 секунд без падений; govulncheck и gitleaks чистые
- Кросс-сборка под windows, linux и darwin скриптом, CI в GitHub Actions и Dockerfile
03 · Как запустить
Запуск одной командой
git clone <репозиторий по запросу> envguard
cd envguard
go build -o envguard ./cmd/envguard
./envguard check # .env против .env.example и схемы04 · Код
Репозиторий приватный
Исходники лежат в приватном репозитории. Напишите в Telegram, открою доступ.
Запросить код