แก้ไขกฎที่ไม่ปลอดภัย

ใช้คู่มือนี้เพื่อทำความเข้าใจช่องโหว่ทั่วไปในกฎความปลอดภัยของ Cloud Firestore กำหนดค่า ตรวจสอบ และรักษาความปลอดภัยให้กฎ และทดสอบการเปลี่ยนแปลงก่อนที่จะนำไปใช้

หากได้รับการแจ้งเตือนว่าฐานข้อมูล Cloud Firestore ไม่มีการรักษาความปลอดภัยอย่างเหมาะสม คุณสามารถแก้ไขช่องโหว่โดยแก้ไขและทดสอบ กฎความปลอดภัยของ Cloud Firestore

หากต้องการดูกฎความปลอดภัยที่มีอยู่ ให้ไปที่แท็บกฎ ในคอนโซล Firebase

ทำความเข้าใจกฎความปลอดภัยของ Cloud Firestore

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

ขณะที่คุณพัฒนาแอปและทดสอบการกำหนดค่าต่างๆ สำหรับ ให้ใช้โปรแกรมจำลอง Cloud Firestore เพื่อเรียกใช้แอปใน สภาพแวดล้อมในการพัฒนาในท้องถิ่น

สถานการณ์ที่พบบ่อยเกี่ยวกับกฎที่ไม่ปลอดภัย

กฎความปลอดภัยของ Cloud Firestore ที่คุณอาจตั้งค่าไว้โดยค่าเริ่มต้นหรือตามที่คุณตั้ง ดำเนินการพัฒนาแอปด้วย Cloud Firestore ควรได้รับการตรวจสอบและอัปเดต ก่อนที่จะทำให้แอปใช้งานได้ ตรวจสอบว่าคุณรักษาความปลอดภัยของผู้ใช้อย่างเหมาะสม ข้อมูล โดยการหลีกเลี่ยงข้อผิดพลาดที่พบบ่อยต่อไปนี้

การเข้าถึงแบบเปิด

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

ไม่แนะนำ: สิทธิ์การอ่านและการเขียนสำหรับ ผู้ใช้
// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}
วิธีแก้ไข: กฎที่จำกัดการอ่านและ สิทธิ์การเขียน

สร้างกฎที่เหมาะสำหรับลำดับชั้นข้อมูล วิธีแก้ปัญหาทั่วไปวิธีหนึ่ง ความไม่ปลอดภัยนี้คือการรักษาความปลอดภัยของผู้ใช้ด้วยการตรวจสอบสิทธิ์ Firebase ดูข้อมูลเพิ่มเติม เกี่ยวกับการตรวจสอบสิทธิ์ผู้ใช้ด้วยกฎ

เจ้าของเนื้อหาเท่านั้น

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow only authenticated content owners access
    match /some_collection/{document} {
      allow read, write: if request.auth != null && request.auth.uid == request.resource.data.author_uid
    }
  }
}
  

การเข้าถึงแบบสาธารณะและส่วนตัวแบบผสม

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow public read access, but only content owners can write
    match /some_collection/{document} {
      allow read: if true
      allow write: if request.auth != null && request.auth.uid == request.resource.data.author_uid
    }
  }
}
  

สิทธิ์เข้าถึงของผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์

บางครั้งกฎความปลอดภัยของ Cloud Firestore ไม่ได้ตรวจสอบว่าผู้ใช้เข้าสู่ระบบแล้ว จำกัดการเข้าถึงตามการตรวจสอบสิทธิ์นั้น หากกฎข้อใดข้อหนึ่งประกอบด้วย auth != null ยืนยันว่าคุณต้องการให้ผู้ใช้ที่เข้าสู่ระบบทุกคนมีสิทธิ์เข้าถึง

ไม่แนะนำ: ผู้ใช้ที่ลงชื่อเข้าสู่ระบบได้อ่านแล้ว และเข้าถึงฐานข้อมูลทั้งหมด
service cloud.firestore {
  match /databases/{database}/documents {
    match /some_collection/{document} {
      allow read, write: if request.auth != null;
    }
  }
}
โซลูชัน: จำกัดการเข้าถึงให้แคบลงโดยใช้การรักษาความปลอดภัย

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

การเข้าถึงตามบทบาท

service cloud.firestore {
  match /databases/{database}/documents {
    // Assign roles to all users and refine access based on user roles
    match /some_collection/{document} {
     allow read: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader"
     allow write: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer"

     // Note: Checking for roles in your database using `get` (as in the code
     // above) or `exists` carry standard charges for read operations.
    }
  }
}

สิทธิ์เข้าถึงตามแอตทริบิวต์

// Give each user in your database a particular attribute
// and set it to true/false
// Then, use that attribute to grant access to subsets of data
// For example, an "admin" attribute set
// to "true" grants write access to data

service cloud.firestore {
  match /databases/{database}/documents {
    match /collection/{document} {
      allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
      allow read: true;
    }
  }
}
  

การเข้าถึงแบบสาธารณะและส่วนตัวแบบผสม

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow public read access, but only content owners can write
    match /some_collection/{document} {
      allow read: if true
      allow write: if request.auth.uid == request.resource.data.author_uid
    }
  }
}
  

การเข้าถึงแบบปิด

ระหว่างที่คุณพัฒนาแอป วิธีการทั่วไปอีกวิธีหนึ่งคือ ข้อมูลถูกล็อก โดยปกติจะหมายถึงคุณได้ปิดการอ่านและเขียน แก่ผู้ใช้ทั้งหมดดังต่อไปนี้

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

Firebase Admin SDK และ Cloud Functions จะยังเข้าถึง ฐานข้อมูล ใช้กฎเหล่านี้เมื่อคุณต้องการใช้ Cloud Firestore แบบเซิร์ฟเวอร์เท่านั้น แบ็กเอนด์ร่วมกับ Firebase Admin SDK แม้ว่าจะปลอดภัย แต่คุณก็ควรทดสอบว่าไคลเอ็นต์ของแอปสามารถ เรียกดูข้อมูลอย่างเหมาะสม

ดูข้อมูลเพิ่มเติมเกี่ยวกับกฎการรักษาความปลอดภัยและการทำงานของ Cloud Firestore เริ่มต้นใช้งานกฎความปลอดภัยของ Cloud Firestore

ตรวจสอบกฎความปลอดภัยของ Cloud Firestore

หากต้องการตรวจสอบลักษณะการทำงานของแอปและยืนยันการกำหนดค่ากฎความปลอดภัยของ Cloud Firestore ใช้โปรแกรมจำลอง Cloud Firestore ใช้ Cloud Firestore โปรแกรมจำลองเพื่อเรียกใช้และทำให้การทดสอบ 1 หน่วยเป็นอัตโนมัติในสภาพแวดล้อมในเครื่องก่อนที่คุณจะทำให้ใช้งานได้ การเปลี่ยนแปลงใดๆ

หากต้องการทดสอบกฎความปลอดภัยของ Cloud Firestore ที่อัปเดตแล้วในคอนโซล Firebase ให้ใช้ เครื่องมือ Rules Playground

  1. หากต้องการเปิดกฎเพลย์กราวด์ ให้คลิกพื้นที่กฎจาก แท็บกฎ
  2. ใ��การตั้งค่ากฎพื้นฐาน ให้เลือกตัวเลือกสำหรับการทดสอบดังต่อไปนี้
    • การทดสอบการอ่านหรือการเขียน
    • ตำแหน่งที่เฉพาะเจาะ���งใน��านข้อมูลใน����ป����บเ��้นทาง
    • ประเภทการตรวจสอบสิทธิ์ — ผู้ใช้ที่ไม่ระบุชื่อ ไม่ผ่านการตรวจสอบสิทธิ์ หรือ รหัสผู้ใช้เฉพาะ
    • ข้อมูลเฉพาะเอกสาร ซึ่งกฎของคุณอ้างอิงเฉพาะ (สำหรับ ตัวอย่างเช่น หากกฎของคุณกำหนดให้มีช่องเฉพาะก่อน สำหรับการอนุญาตให้เขียน)
  3. คลิกเรียกใช้ และมองหาผลลัพธ์ในแบนเนอร์เหนือหน้าต่างกฎ