~/VibeHandbook
PDF ฟรี

บท 18 · 03

ความลับและ API key: กับดักคีย์ที่ถูกเปิดเผย

ความลับ () คือสิ่งใดก็ตามที่ให้สิทธิ์เข้าถึง เช่น (Application Programming Interface) key รหัสผ่านฐานข้อมูล โทเคนของผู้ให้บริการชำระเงิน คีย์สำหรับเซ็นชื่อดิจิทัล ความผิดพลาดที่พบบ่อยที่สุด — และแพงที่สุด — ของการทำ vibe coding คือการทำความลับรั่วไหล

มีกับดักสองแบบที่ดักคนไว้อยู่เสมอ:

  • ความลับในโค้ดฝั่งไคลเอนต์ อะไรก็ตามที่อยู่ใน ของคุณ (JavaScript ที่ทำงานในเบราว์เซอร์) ถือว่า เปิดเผยต่อสาธารณะ ผู้ใช้สามารถเปิด dev tools แล้วอ่านมันได้ AI เมื่อถูกขอให้เรียก API จากคอมโพเนนต์ React มันจะยินดีวาง secret key ของคุณตรงนั้นเลย — และตอนนี้ใครก็ตามที่เข้าเว็บไซต์ของคุณก็สามารถคัดลอกมันไปใช้จนบิลคุณพุ่งได้ Secret key ควรอยู่ที่ฝั่งเซิร์ฟเวอร์เท่านั้น ไม่ใช่ในโค้ดที่ถูกส่งไปยังเบราว์เซอร์
  • ความลับในรีโพ คีย์ที่ถูกฝังตายตัวในไฟล์จะถูก เข้า แม้ว่าคุณจะลบมันในภายหลัง มันก็ยังคงอยู่ในประวัติของ git ตลอดไป และบอตต่าง ๆ ก็สแกนหารีโพสาธารณะเพื่อหาสิ่งนี้ภายในไม่กี่นาทีหลังจาก push

บ้านที่ปลอดภัยสำหรับความลับคือ — ค่าที่ถูกส่งให้แอปตอนรันไทม์ โดยไม่อยู่ในโค้ดเลย:

// VULNERABLE: key is in the source, will be committed to git
const stripe = new Stripe("sk_live_51H8xQ2eZvK...");

// SAFE: key is read from the environment, never written in code
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);

ความลับมีบ้านที่ปลอดภัยเพียงที่เดียวเท่านั้น — ฝั่งเซิร์ฟเวอร์ ที่อ่านมาจาก environment เบราว์เซอร์คือพื้นที่สาธารณะ อะไรก็ตามที่ถูกส่งไปที่นั่นสามารถถูกอ่านได้โดยใครก็ตามที่เปิด dev tools

            ┌──────────────────────────────────────────┐
            │  .env  (gitignored, never committed)      │
            │  STRIPE_SECRET_KEY=sk_live_...            │
            └───────────────────┬──────────────────────┘
                                │ injected at runtime
                                ▼
   ┌──────────────────────┐          ┌──────────────────────┐
   │   SERVER             │          │   BROWSER (client)    │
   │   process.env.KEY ✓  │   ✗──────│   anyone can read     │
   │   calls Stripe here  │  NEVER   │   dev tools · "view   │
   │                      │  send    │   source" · network   │
   └──────────────────────┘  here    └──────────────────────┘
        safe: stays private              public: = leaked

เพิ่ม .env (และ .env.local ฯลฯ) เข้าไปใน .gitignore ของคุณ ก่อน ที่จะเขียนความลับสักตัวเดียว ถ้าคีย์ตัวใดตกไปอยู่ในโค้ดหรือประวัติของคุณ ให้ถือว่ามันถูกเผาแล้ว: หมุนมันใหม่ (rotate — สร้างตัวใหม่และเพิกถอนตัวเก่า) เพราะแค่ลบบรรทัดนั้นไม่พอ เนื่องจากคีย์เก่ายังคงใช้งานได้และยังอยู่ข้างนอกนั่น

อยากได้แบบออฟไลน์?

ดาวน์โหลดหนังสือทั้งเล่มเป็น PDF หรือ EPUB — ฟรี