Порівняння .env файлів (ENV Diff)
Порівняйте два .env файли (staging проти production, до і після деплою) і побачте, які ключі додано, видалено чи змінено — значення, схожі на секрети, маскуються автоматично.
Результат
Порівнювати staging .env файл із production, або сьогоднішній конфіг деплою з минулотижневим, на око — це якраз те, з чого починаються реальні збої: пропущений DATABASE_URL, PORT, що тихо змінився, API-ключ, який ротували в одному середовищі, але не в іншому. Вставляння обох файлів у звичайний текстовий диф теж мало допомагає — він показує, які рядки відрізняються, а не які саме змінні середовища змінилися, і при цьому охоче показує кожне секретне значення відкритим текстом, щойно ви поділитеся результатом з колегою.
Цей інструмент парсить обидва файли так само, як їх насправді читає dotenv — одна пара KEY=value на рядок, коментарі # та порожні рядки ігноруються, значення в одинарних чи подвійних лапках розкавичуються (з розкодуванням \n лише всередині подвійних лапок, точно за конвенцією dotenv), а опційний префікс export KEY=value толерується так само, як його використовують файли середовища, підвантажені через shell. Кожен файл перетворюється на чисту мапу ключ-значення, а потім дві мапи порівнюються по ключах: наявний лише у Файлі A — 'видалено', наявний лише у Файлі B — 'додано', наявний в обох з різним значенням — 'змінено', а однакові значення — 'без змін' і за замовчуванням приховані, щоб таблиця залишалася зосередженою на реальних відмінностях.
Функція, яка робить цей інструмент безпечним для реальних секретів, — автоматичне маскування. Кожне значення в таблиці дифу перевіряється за двома незалежними сигналами: чи схожа назва ключа на секрет (регістронезалежний збіг із KEY, SECRET, TOKEN, PASSWORD, PRIVATE чи CREDENTIAL), або чи має саме значення високу ентропію Шеннона — ту саму інформаційно-теоретичну міру (-Σ p(c)·log2(p(c)) за символами значення), яка позначає API-ключі, токени й випадкові паролі як статистично відмінні від звичайних слів, навіть коли назва ключа не дає жодної підказки. Будь-якого із сигналів досить, щоб замаскувати значення до перших і останніх двох символів, обчислено окремо для старої й нової сторони кожного зміненого рядка.
Усе — парсинг, обчислення дифу, оцінка ентропії й маскування — виконується повністю у вашому браузері; жоден файл і жодне видобуте з нього значення нікуди не надсилається. Це та гарантія, яка потрібна інструменту, чиє єдине завдання — дивитися на два файли, що, ймовірно, містять реальні облікові дані бази даних, API-ключі й паролі поруч одне з одним.