ทำความเข้าใจกฎการรักษาความปลอดภัยของ Firebase สำหรับ Cloud Storage

การรักษาความปลอดภัยเป็นหนึ่งในส่วนที่ซับซ้อนที่สุดของการพัฒนาแอป ในแอปพลิเคชันส่วนใหญ่ นักพัฒนาแอปต้องสร้างและเรียกใช้เซิร์ฟเวอร์ที่จัดการการตรวจสอบสิทธิ์ (ผู้ใช้เป็นใคร) และการให้สิทธิ์ (สิ่งที่ผู้ใช้ทําได้) การตรวจสอบสิทธิ์และการให้สิทธิ์นั้นตั้งค่าได้ยาก ดำเนินการให้ถูกต้องได้ยากกว่า และมีความสำคัญต่อความสำเร็จของผลิตภัณฑ์

เช่นเดียวกับที่ Firebase Authentication ช่วยให้คุณตรวจสอบสิทธิ์ผู้ใช้ได้อย่างง่ายดาย Firebase Security Rules สำหรับ Cloud Storage จะช่วยให้คุณให้สิทธิ์ผู้ใช้และตรวจสอบคำขอได้อย่างง่ายดาย Cloud Storage Security Rules จัดการความซับซ้อนให้คุณโดยอนุญาตให้คุณระบุสิทธิ์ตามเส้นทาง คุณเขียนกฎการให้สิทธิ์ที่จำกัดคำขอ Cloud Storage ให้กับผู้ใช้บางรายหรือจำกัดขนาดการอัปโหลดได้ภายในไม่กี่บรรทัดของโค้ด

Firebase Realtime Database มีฟีเจอร์ที่คล้ายกันซึ่งเรียกว่า Firebase Realtime Database Security Rules

การตรวจสอบสิทธิ์

การทราบว่าผู้ใช้เป็นใครเป็นส่วนสําคัญในการสร้างแอปพลิเคชัน และFirebase Authenticationมีโซลูชันการตรวจสอบสิทธิ์ฝั่งไคลเอ็นต์ที่ใช้งานง่ายและปลอดภัย Firebase Security Rules สำหรับ Cloud Storage เชื่อมโยงกับ Firebase Authentication สำหรับการรักษาความปลอดภัยตามผู้ใช้ เมื่อผู้ใช้ได้รับการตรวจสอบสิทธิ์ด้วย Firebase Authenticationตัวแปร request.auth ใน Cloud Storage Security Rules จะกลายเป็นออบเจ็กต์ที่มีรหัสที่ไม่ซ้ำกันของผู้ใช้ (request.auth.uid) และข้อมูลผู้ใช้อื่นๆ ทั้งหมดในโทเค็น (request.auth.token) เมื่อผู้ใช้ไม่ได้รับการตรวจสอบสิทธิ์ request.auth จะเท่ากับ null ซึ่งจะช่วยให้คุณควบคุมการเข้าถึงข้อมูลได้อย่างปลอดภัยตามผู้ใช้แต่ละราย ดูข้อมูลเพิ่มเติมได้ในส่วนการตรวจสอบสิทธิ์

การให้สิทธิ์

การระบุผู้ใช้เป็นเพียงส่วนหนึ่งของการรักษาความปลอดภัย เมื่อทราบตัวตนของบุคคลดังกล่าวแล้ว คุณจะต้องมีวิธีควบคุมการเข้าถึงไฟล์ใน Cloud Storage ของบุคคลเหล่านั้น

Cloud Storage ให้คุณระบุกฎการให้สิทธิ์ระดับไฟล์และระดับเส้นทางที่อยู่ในเซิร์ฟเวอร์ของเราและกำหนดการเข้าถึงไฟล์ในแอปได้ ตัวอย่างเช่น Cloud Storage Security Rules เริ่มต้นกำหนดให้ต้องมี Firebase Authentication เพื่อดำเนินการ read หรือ write ในไฟล์ทั้งหมด ดังนี้

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

คุณแก้ไขกฎเหล่านี้ได้โดยเลือกแอป Firebase ในคอนโซล Firebase และดูแท็บ Rules ของส่วนพื้นที่เก็บข้อมูล

การตรวจสอบข้อมูล

Firebase Security Rules สำหรับ Cloud Storage ยังใช้ตรวจสอบข้อมูลได้ด้วย ซึ่งรวมถึงการตรวจสอบชื่อและเส้นทางไฟล์ รวมถึงพร็อพเพอร์ตี้ข้อมูลเมตาของไฟล์ เช่น contentType และ size

service firebase.storage {
  match /b/{bucket}/o {
    match /images/{imageId} {
      // Only allow uploads of any image file that's less than 5MB
      allow write: if request.resource.size < 5 * 1024 * 1024
                   && request.resource.contentType.matches('image/.*');
    }
  }
}

ขั้นตอนถัดไป