Dotenv (.env)

The มาตรฐาน

.env เป็นแนวทางที่ใช้กันแพร่หลายในการเก็บตัวแปรสภาพแวดล้อมในไฟล์ข้อความ แต่ไวยากรณ์และการโหลดขึ้นอยู่กับเครื่องมือ จึงไม่ใช่มาตรฐานสากล

แปลง ENV เป็น JSON

ตัวแปลงจาก ENV เป็น JSON ฟรีในเบราว์เซอร์ แปลงไฟล์ได้ทันทีบนอุปกรณ์ของคุณ

ตรวจสอบไฟล์และข้อมูลเมตา

ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ ENV โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:

เลือกหรือวางไฟล์ที่นี่

เป็นส่วนตัว - ไฟล์จะไม่ออกจากอุปกรณ์ของคุณ

หรือวาง Ctrl+V
รับประกันความเป็นส่วนตัวโดยไม่มีการส่งข้อมูลผ่านเครือข่าย: อัปโหลด 0 ไบต์ไปยังเซิร์ฟเวอร์ภายนอก การประมวลผลทั้งหมดเกิดขึ้นภายในแซนด์บ็อกซ์ของเบราว์เซอร์ของคุณ

ลายเซ็นส่วนหัวระดับไบต์

ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ ENV โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:

ลายเซ็น HEX (OFFSET 0):

41 2D 5A 5F 3D

การแสดงผลรูปแบบ ASCII: KEY=VAL

มาตรฐาน: The Twelve-Factor App Specification / Dotenv Standard

ข้อมูลจำเพาะทางเทคนิค

สถาปัตยกรรมคอนเทนเนอร์คู่ key=value แบบข้อความล้วนที่กำหนดตัวแปรสภาพแวดล้อมของระบบปฏิบัติการ และอาจรองรับคำนำหน้า export กับเครื่องหมายอัญประกาศ
การบีบอัดสตรีมข้อความแบบไม่บีบอัด
การจัดลำดับไบต์สตรีมข้อความ UTF-8
พื้นที่สีไม่เกี่ยวข้อง (ไฟล์กำหนดค่า)
ช่องสัญญาณและโครงสร้างชื่อตัวแปรสภาพแวดล้อม, ค่าสตริง และบรรทัดความคิดเห็น (#)
ขนาดสูงสุดความยาวไฟล์ไม่จำกัด
ความโปร่งใสไม่มี
การสตรีมและแบบโปรเกรสซีฟเรียกใช้งานสตรีมตามลำดับทีละบรรทัด

ตารางเปรียบเทียบทางเทคนิค: ENV กับคู่แข่ง

คุณลักษณะทางเทคนิคENV (ปัจจุบัน)JSONYAMLINI
การจัดการข้อมูลลับแยกข้อมูลลับออกจากซอร์สโค้ดคอมมิตในรีโปโดยค่าเริ่มต้นคอมมิตในรีโปโดยค่าเริ่มต้นคอมมิตในรีโปโดยค่าเริ่มต้น
ความเรียบง่ายของไวยากรณ์ไม่มีโค้ดส่วนเกิน: KEY=valueต้องใช้วงเล็บและเครื่องหมายคำพูดต้องมีการเยื้องย่อหน้าที่เข้มงวดต้องมีส่วนหัวของหมวดหมู่
การผูกกับสภาพแวดล้อม OSแมตช์แบบ 1 ต่อ 1 กับ process.env โดยตรงต้องแยกวิเคราะห์เป็นออบเจ็กต์ต้องแยกวิเคราะห์เป็นออบเจ็กต์ต้องแยกวิเคราะห์เป็นออบเจ็กต์
ลำดับชั้นข้อมูลคู่คีย์-ค่าแบบแบนเท่านั้นลำดับชั้นแบบซ้อนกันไม่จำกัดลำดับชั้นแบบซ้อนกันไม่จำกัดเนมสเปซของ section ระดับเดียว

รูปแบบความเสียหายทั่วไปและคู่มือการกู้คืน Hex

แอปพลิเคชันขัดข้องพร้อมข้อความ 'TypeError: Cannot read property of undefined' สำหรับตัวแปรสภาพแวดล้อมที่คาดไว้

สาเหตุหลัก: มีช่องว่างรอบเครื่องหมายเท่ากับ (เช่น 'KEY = VALUE' แทนที่จะเป็น 'KEY=VALUE') หรือเครื่องหมายคำพูดที่ปิดไม่สนิท

การกู้คืน: ปรับมาตรฐานและจัดรูปแบบไวยากรณ์สภาพแวดล้อมด้วย File2File.app Config Sanitizer

การวิเคราะห์ความปลอดภัยและเวกเตอร์การโจมตีตัวแยกวิเคราะห์

ห้ามคอมมิตไฟล์ .env ไปยัง git เพิ่ม .env ลงใน .gitignore เสมอและใช้บริการจัดการความลับในระบบโปรดักชัน

เวกเตอร์การโจมตีที่ทราบ

  • การคอมมิต git โดยไม่ได้ตั้งใจ ทำให้คีย์ AWS และรหัสผ่านฐานข้อมูลสำหรับการใช้งานจริงรั่วไหลบน GitHub สาธารณะ
  • การกำหนดค่าเว็บเซิร์ฟเวอร์ผิดพลาดจนทำให้เสิร์ฟไฟล์ '.env' ตรงไปยังคำขอ HTTP สาธารณะ
  • การฉีดคำสั่ง (command injection) ผ่านการขยายตัวแปรเชลล์ที่ไม่ได้หลีกอักขระในตัวโหลด dotenv

แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน: ห้ามคอมมิตไฟล์ .env ไปยัง git เพิ่ม .env ลงใน .gitignore เสมอและใช้บริการจัดการความลับในระบบโปรดักชัน

ประวัติความเป็นมาและเหตุการณ์สำคัญ

2013ไลบรารีโอเพนซอร์ส 'dotenv' สำหรับ Node.js ทำให้ไฟล์ .env ได้รับความนิยมอย่างแพร่หลายในการพัฒนาเว็บฟูลสแตกสมัยใหม่
2011Adam Wiggins เผยแพร่วิธีการพัฒนาแบบ The Twelve-Factor App โดยกำหนดให้ต้องจัดเก็บค่ากำหนดไว้ในสภาพแวดล้อมเท่านั้น
2011Heroku เป็นผู้บุกเบิกการจัดการตัวแปรสภาพแวดล้อมบนคลาวด์ ซึ่งเป็นแรงบันดาลใจให้เกิดการจำลองไฟล์ .env ในเครื่อง

ข้อได้เปรียบและจุดเด่นสำคัญ

  • แนวปฏิบัติที่ดีที่สุดด้านความปลอดภัย: ช่วยเก็บรหัสผ่านฐานข้อมูล โทเค็น API และคีย์การเข้ารหัสลับให้อยู่นอกที่เก็บซอร์สโค้ด
  • ไฟล์ .env ใช้ในหลายระบบนิเวศ แต่รูปแบบไวยากรณ์และวิธีโหลดขึ้นอยู่กับเครื่องมือ
  • อ่าน เขียน และทำให้เป็นอัตโนมัติได้ง่ายมากในสคริปต์การปรับใช้และไปป์ไลน์การผสานรวมอย่างต่อเนื่อง

ข้อจำกัดทางเทคนิคและข้อควรพิจารณา

  • ความเสี่ยงสูงในการเปิดเผยโดยไม่ได้ตั้งใจ: นักพัฒนาเผลอคอมมิตไฟล์ '.env' ไปยังที่เก็บสาธารณะบน GitHub
  • ขาดการเข้ารหัสในตัวขณะพัก (at rest) เว้นแต่จะใช้เครื่องมือพิเศษเช่น Doppler หรือ dotenv-vault
  • ไม่รองรับโครงสร้างข้อมูลแบบซ้อนกันที่ซับซ้อน (ค่าต่างๆ เป็นสตริงแบบแบนเท่านั้น)

เกร็ดความรู้ทางเทคนิคที่น่าสนใจ

  • กฎข้อที่ III ของระเบียบวิธี 'Twelve-Factor App' ชื่อดังระบุไว้อย่างชัดเจนว่า: 'จัดเก็บค่ากำหนดไว้ในสภาพแวดล้อม'
  • ไฟล์ '.env' ขึ้นต้นด้วยจุด เพื่อให้ระบบปฏิบัติการ Unix มองว่าเป็นไฟล์ที่ซ่อนอยู่โดยค่าเริ่มต้น
  • เทมเพลต '.gitignore' ทุกชุดในโลกการเขียนโปรแกรมจะรวม '.env' ไว้เป็นกฎการละเว้นตัวแรกสุดที่แนะนำ

คำถามทางเทคนิคที่พบบ่อย

ไฟล์ .env คืออะไร

ไฟล์ .env คือไฟล์ข้อความง่ายๆ ที่เก็บคีย์ลับ รหัสผ่านฐานข้อมูล และการตั้งค่าสภาพแวดล้อมเป็นคู่ค่า KEY=VALUE เพื่อความปลอดภัยและแยกออกจากซอร์สโค้ดของคุณ

ฉันควรคอมมิตไฟล์ .env ไปยัง GitHub หรือไม่

ไม่ควรอย่างยิ่ง! คุณไม่ควรคอมมิตไฟล์ .env ไปยัง GitHub หรือที่เก็บข้อมูลสาธารณะใดๆ เด็ดขาด การทำเช่นนั้นจะเปิดเผยรหัสผ่านลับและคีย์ API ของคุณแก่สาธารณะ

ฉันจะแปลงไฟล์ ENV เป็น JSON ได้อย่างไร

คุณสามารถแปลงไฟล์ .env เป็นออบเจ็กต์ JSON ที่จัดรูปแบบเรียบร้อยหรือไฟล์ YAML ได้อย่างปลอดภัย โดยใช้ File2File.app ในเว็บเบราว์เซอร์ของคุณ และไม่มีข้อมูลออกจากอุปกรณ์เลย