เก็บ API Key ให้ปลอดภัย — ใช้ไฟล์ .env อย่าแปะในโค้ด
สอนมือใหม่เก็บ API key และ environment variable ให้ปลอดภัย ทำไมห้ามแปะในโค้ดหรือ push ขึ้น GitHub พร้อมตัวอย่างไฟล์ .env กับ .gitignore และวิธีรับมือเมื่อคีย์หลุด
ลองนึกภาพว่าคุณเขียนแอปเชื่อมต่อบริการ AI สักตัว มันให้ "รหัสลับ" มาก้อนหนึ่งไว้ใช้งาน แล้วคุณเผลอแปะรหัสนั้นลงในโค้ดแล้วอัปขึ้น GitHub วันรุ่งขึ้นค่าใช้จ่ายพุ่งเป็นหมื่นเพราะมีคนขโมยรหัสไปใช้ เรื่องนี้เกิดขึ้นจริงกับมือใหม่บ่อยมาก บทความนี้จะสอนวิธีเก็บ API key และ environment variable ให้ปลอดภัยแบบเข้าใจง่าย
API Key คืออะไร
API key คือรหัสลับที่ใช้ยืนยันตัวตน เวลาโปรแกรมของเราขอใช้บริการภายนอก เช่น บริการส่งอีเมล บริการแผนที่ หรือบริการ AI
เปรียบง่าย ๆ คือมันเหมือน กุญแจบ้าน หรือ รหัสผ่านประจำบัญชี เมื่อโปรแกรมยื่นคีย์นี้ไป บริการปลายทางก็รู้ว่า "อ๋อ คนนี้คือเจ้าของบัญชีจริง" แล้วอนุญาตให้ใช้งาน พร้อมกับคิดค่าใช้จ่ายเข้าบัญชีเราด้วย
เพราะฉะนั้น ใครก็ตามที่ได้คีย์นี้ไป ก็ใช้บริการในนามเราได้ทันที และเราเป็นคนจ่ายเงิน นี่คือเหตุผลว่าทำไมมันถึงต้องเก็บเป็นความลับสุด ๆ
ทำไมห้ามแปะ API key ในโค้ด
มือใหม่หลายคนสะดวก เลยพิมพ์คีย์ลงในโค้ดตรง ๆ แบบนี้
apiKey = "sk-1234567890abcdef" // อย่าทำแบบนี้เด็ดขาดปัญหาคือ พอคุณอัปโค้ดขึ้น GitHub คีย์นั้นก็กลายเป็นของสาธารณะทันที มีบอทคอยกวาดหา API key ตามโปรเจกต์สาธารณะตลอด 24 ชั่วโมง เจอเมื่อไหร่ก็เอาไปใช้จนบิลบานทันที
ที่แย่กว่านั้นคือ ต่อให้คุณลบคีย์ออกทีหลัง ประวัติเก่าใน Git ก็ยังเก็บคีย์นั้นไว้อยู่ดี เหมือนลบข้อความไปแล้วแต่ยังมีสำเนาเดิมค้างอยู่ ใครย้อนดูประวัติก็เจอ
วิธีที่ถูกต้อง ใช้ไฟล์ .env
ทางแก้มาตรฐานคือแยกคีย์ออกจากโค้ด เอาไปเก็บใน environment variable ซึ่งแปลว่า "ค่าตัวแปรที่อยู่นอกโค้ด" วิธีที่นิยมที่สุดคือเก็บในไฟล์ชื่อ .env
ตัวอย่างหน้าตาไฟล์ .env
API_KEY=sk-1234567890abcdef
DATABASE_URL=postgres://user:pass@localhost:5432/mydb
LINE_TOKEN=abcdef123456ในโค้ดเราจะไม่เขียนคีย์ตรง ๆ แต่จะ "เรียกอ่าน" ค่าจากไฟล์ .env แทน ผลคือโค้ดสะอาด ไม่มีความลับปนอยู่เลย เวลาแชร์โค้ดให้คนอื่นหรืออัปขึ้น GitHub ก็ปลอดภัย เพราะเราจะไม่อัปไฟล์ .env ขึ้นไปด้วย
กันไม่ให้ .env หลุดด้วย .gitignore
แค่มีไฟล์ .env ยังไม่พอ ต้องบอก Git ด้วยว่า "อย่าอัปไฟล์นี้ขึ้นไปนะ" ทำได้โดยสร้างไฟล์ชื่อ .gitignore แล้วใส่รายชื่อไฟล์ที่ห้ามอัป
ตัวอย่างไฟล์ .gitignore
# ไฟล์ความลับ ห้ามอัปขึ้น GitHub
.env
.env.local
# โฟลเดอร์ที่ไม่จำเป็นต้องอัป
node_modules/พอมี .env อยู่ในรายการนี้ Git จะมองข้ามไฟล์นั้นไปเลย ทำให้คีย์ของเราไม่มีวันหลุดขึ้น GitHub โดยไม่ตั้งใจ
ทิปเสริมสำหรับทีม คนมักสร้างไฟล์ตัวอย่างชื่อ .env.example ที่ใส่แค่ ชื่อตัวแปรแต่เว้นค่าว่าง ไว้ให้เพื่อนร่วมทีมรู้ว่าต้องกรอกคีย์อะไรบ้าง ไฟล์นี้อัปขึ้น GitHub ได้เพราะไม่มีความลับจริง
ถ้าคีย์หลุดต้องทำยังไง
ถ้าเผลอทำคีย์หลุด เช่น อัปขึ้น GitHub ไปแล้ว หรือส่งให้คนผิด ให้ทำทันที
- ถือว่าคีย์นั้นตายแล้ว อย่าเสียเวลาลุ้นว่าจะมีคนเห็นไหม ให้สันนิษฐานว่าหลุดแน่นอน
- เข้าไปยกเลิก (revoke) คีย์เดิม ในหน้าจัดการของบริการนั้น พอ revoke แล้วคีย์เก่าจะใช้ไม่ได้อีก ต่อให้ใครขโมยไปก็ทำอะไรไม่ได้
- สร้างคีย์ใหม่ (regenerate) แล้วนำมาใส่ในไฟล์
.envแทนที่ของเดิม - ตั้งวงเงินหรือแจ้งเตือน ถ้าบริการนั้นมีให้ตั้งเพดานค่าใช้จ่าย จะช่วยจำกัดความเสียหายหากเกิดเหตุอีก
กฎง่าย ๆ สำหรับมือใหม่
- อย่าพิมพ์คีย์ลงในโค้ดโดยตรง เก็บใน
.envเสมอ - มี
.gitignoreและใส่.envไว้เสมอ ตั้งแต่วันแรกที่เริ่มโปรเจกต์ - อย่าส่งคีย์ผ่านแชตหรืออีเมลแบบเปิด ถ้าจำเป็นต้องส่ง ให้ใช้ช่องทางที่ปลอดภัย
- เช็กก่อน push ทุกครั้ง ว่าไม่มีความลับหลุดไปกับโค้ด ก่อนจะ deploy ขึ้นใช้จริง
- เรื่องนี้เป็นส่วนหนึ่งของความปลอดภัยเวลาเขียนโค้ดด้วย AI อ่านต่อได้ที่ Vibe Coding ให้ปลอดภัย
สรุป
API key คือกุญแจเข้าใช้บริการ ใครถือก็ใช้ในนามเราได้ จึงต้องเก็บเป็นความลับ ห้ามแปะในโค้ดหรือ push ขึ้น GitHub เด็ดขาด วิธีที่ถูกต้องคือเก็บคีย์ในไฟล์ .env แล้วใส่ .env ไว้ใน .gitignore เพื่อกันไม่ให้หลุด ถ้าเผลอทำหลุด ให้รีบ revoke คีย์เดิมแล้วสร้างใหม่ทันที ทำตามกฎง่าย ๆ เหล่านี้ตั้งแต่วันแรก แล้วคุณจะเขียนโค้ดต่อบริการต่าง ๆ ได้อย่างสบายใจ ไม่ต้องกลัวบิลบานปลายกลางดึก
คำถามที่พบบ่อย
API key คืออะไร?
API key คือรหัสลับที่ใช้ยืนยันตัวตนเวลาโปรแกรมของเราขอใช้บริการภายนอก เปรียบเหมือนกุญแจหรือรหัสผ่านประจำบัญชี ใครถือคีย์นี้ก็ใช้บริการในนามเราได้ จึงต้องเก็บเป็นความลับ
ถ้าเผลอ push API key ขึ้น GitHub ต้องทำยังไง?
ให้ถือว่าคีย์นั้นหลุดแล้วทันที เข้าไปที่หน้าบริการเพื่อยกเลิก (revoke) คีย์เดิมแล้วสร้างคีย์ใหม่ อย่าแค่ลบไฟล์ออก เพราะประวัติเก่าใน Git ยังเห็นคีย์เดิมได้อยู่