בודק הבדלי ENV
השווה שני קבצי .env (staging מול production, לפני ואחרי deploy) וראה בדיוק אילו מפתחות נוספו, הוסרו או השתנו, כאשר ערכים שנראים סודיים ממוסכים אוטומטית.
🔒 מעובד כולו בדפדפן שלך - שום דבר שתזין כאן לא יועלה לעולם.
תוצאה
השוואת קובץ .env של staging מול production, או קובץ deploy של היום מול זה של שבוע שעבר, בעין — כך מתחילות תקלות אמיתיות: DATABASE_URL חסר, PORT שהשתנה בשקט, מפתח API שרוענן בסביבה אחת אבל לא בשנייה. הדבקת שני הקבצים להשוואת טקסט גנרית גם לא ממש עוזרת — היא מראה אילו שורות שונות, לא אילו משתני סביבה באמת השתנו, והיא מדפיסה בשמחה כל ערך סודי גלוי לעין ברגע שמשתפים את הפלט עם חבר צוות.
הכלי הזה מפענח את שני הקבצים בדיוק כפי ש־dotenv קוראת אותם — צמד KEY=value אחד לשורה, הערות # ושורות ריקות נדלגות, ערכים במירכאות בודדות/כפולות נפתחים (כאשר משוחרר רק בתוך מירכאות כפולות, בדיוק כפי שמפרטת המוסכמה של dotenv), וקידומת export KEY=value נסבלת כפי שמשתמשים בה קבצי env שמקורם ב־shell. כל קובץ הופך למפה נקייה של מפתח-לערך, ושתי המפות מושוות לפי מפתח: קיים רק בקובץ א׳ — 'הוסר', קיים רק בקובץ ב׳ — 'נוסף', קיים בשניהם עם ערך שונה — 'השתנה', וערכים זהים — 'ללא שינוי' ומוסתרים כברירת מחדל כדי שהטבלה תישאר ממוקדת במה שבאמת שונה.
התכונה שהופכת את זה לבטוח לשימוש עם סודות אמיתיים היא מיסוך אוטומטי. כל ערך המוצג בטבלת ההשוואה נבדק מול שני אותות בלתי תלויים: האם שם המפתח נראה סודי (התאמה לא רגישת רישיות מול KEY, SECRET, TOKEN, PASSWORD, PRIVATE או CREDENTIAL), או שלערך עצמו יש אנטרופיית שאנון גבוהה — אותה מידה מתורת האינפורמציה (-Σ p(c)·log2(p(c)) על תווי הערך) שמסמנת מפתחות API, אסימונים וסיסמאות אקראיות כשונים סטטיסטית ממילים רגילות, גם כששם המפתח לא נותן רמז. כל אחד מהאותות מספיק כדי למסך ערך לשתי התווים הראשונים והאחרונים, מחושב בנפרד עבור הצד הישן והחדש של כל שורה שהשתנתה.
הכל — פענוח, השוואה, ניקוד אנטרופיה ומיסוך — רץ במלואו בדפדפן; אף קובץ, ואף ערך שחולץ מהם, לא נשלח לשום מקום. זו הערבות הנכונה לכלי שכל תפקידו הוא להסתכל על שני קבצים שסביר להניח שמכילים פרטי התחברות אמיתיים למסד נתונים, מפתחות API וסיסמאות זה לצד זה.