N

Nokfa Docs

Current: framework-next.js

ไม่มีชื่อบทความ

เยี่ยมมากที่ตั้งคำถามนี้ เพราะการแยก ตัวแปร env ระหว่างฝั่ง client และ server มีผลสำคัญต่อความปลอดภัยของระบบ 🔐 มาดูกันทีละตัวในบริบท Firebase:


🔍 รายการตัวแปรและการพิจารณาความปลอดภัย

ตัวแปร ควรอยู่ฝั่ง Client? ความปลอดภัย/เหตุผล
FIREBASE_CLIENT_API_KEY ✅ ใช้ฝั่ง Client ได้ ไม่ลับ API key ของ Firebase สำหรับ client ไม่เป็นความลับ และ Google ระบุชัดว่าสามารถ embed ใน frontend ได้ แต่ควรใช้ Security Rules เพื่อป้องกัน misuse
FIREBASE_CLIENT_AUTH_DOMAIN ✅ ได้ ไม่ลับ ใช้สำหรับ Firebase Auth UI
FIREBASE_CLIENT_PROJECT_ID ✅ ได้ ใช้สำหรับอ้างอิงโปรเจกต์ ไม่ลับ
FIREBASE_CLIENT_STORAGE_BUCKET ✅ ได้ ใช้สำหรับกำหนดปลายทาง storage
FIREBASE_CLIENT_MESSAGING_SENDER_ID ✅ ได้ ใช้กับ Firebase Cloud Messaging
FIREBASE_CLIENT_APP_ID ✅ ได้ อ้างอิงแอปใน Firebase ไม่ลับ

⚠️ สรุปข้อควรระวัง

  • API Key ของ Firebase ไม่ใช่ secret key มันไม่ได้ให้สิทธิ์ระดับสูงโดยตรง
    แต่หากตั้ง Firestore Rules หรือ Storage Rules ไม่ดี เช่น allow read, write: if true; ก็เท่ากับเปิด public หมด

  • อย่าใส่ Firebase Admin SDK credentials (private key) ไว้ใน client เด็ดขาด
    ถ้ามี .json แบบ service account key (จาก Firebase Console) อันนั้นต้องใช้แค่ฝั่ง server เท่านั้น!


✅ สรุปแนวทางที่แนะนำ

  • สำหรับ Client:
    ✅ ใช้ได้ทั้งหมดที่คุณระบุ โดยใส่ไว้ใน .env.local และตั้งชื่อขึ้นต้นด้วย NEXT_PUBLIC_
    ⛔ ห้ามใช้ secret key หรือ private key ใด ๆ ที่ได้จาก Firebase Console (service accounts)

  • สำหรับ Server-only (เช่น API route หรือ backend):
    ✅ สามารถใช้ตัวแปร .env ปกติ (ไม่ต้องมี NEXT_PUBLIC_)
    ✅ ใช้ Firebase Admin SDK ได้


ถ้าอยากให้ช่วยดูว่า rules ตอนนี้ที่คุณตั้งไว้ยังปลอดภัยไหม บอกได้เลยจ้ะ จะช่วยดูให้ว่าเปิดกว้างเกินไปหรือเปล่า 😊