Catch up on everthing we announced at this year's Firebase Summit. Learn more

หลีกเลี่ยงกฎที่ไม่ปลอดภัย

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

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

เข้าถึงกฎความปลอดภัยของ Firebase

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

ในการเข้าถึงกฎของคุณจาก Firebase คอนโซล เลือกโครงการของคุณจากนั้นไปที่ฐานข้อมูลเรียลไทม์เมฆ FireStore หรือการจัดเก็บข้อมูล คลิกกฎเมื่อคุณอยู่ในฐานข้อมูลที่ถูกต้องหรือจัดเก็บถัง

ในการเข้าถึงกฎของคุณจาก Firebase CLI ไปที่กฎที่ระบุไว้ในไฟล์ของคุณ ไฟล์ firebase.json

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

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

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

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

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

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

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

ไม่แนะนำ: การอ่านและเขียนการเข้าถึงสำหรับผู้ใช้ทุกคน

Cloud Firestore

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this ruleset in production; it allows
// anyone to overwrite your entire database.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

ฐานข้อมูลเรียลไทม์

{
  // Allow read/write access to all users under any conditions
  // Warning: **NEVER** use this ruleset in production; it allows
  // anyone to overwrite your entire database.

  "rules": {
    ".read": true,
    ".write": true
  }
}
    

การจัดเก็บเมฆ

// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with App Engine, this will also make
// files uploaded via App Engine public.
// Warning: This rule makes every file in your Cloud Storage bucket accessible to any user.
// Apply caution before using it in production, since it means anyone
// can overwrite all your files.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}
    
การแก้ไข: กฎที่ จำกัด ในการอ่านและเขียนเข้าถึง

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

Cloud Firestore

ฐานข้อมูลเรียลไทม์

การจัดเก็บเมฆ

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

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

ไม่แนะนำ: ใด ๆ ที่เข้าสู่ระบบผู้ใช้มีการอ่านและการเขียนการเข้าถึงฐานข้อมูลทั้งหมดของคุณ

Cloud Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    match /some_collection/{document} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

ฐานข้อมูลเรียลไทม์

{
  "rules": {
    ".read": "auth.uid != null",
    ".write": "auth.uid != null"
  }
}

การจัดเก็บเมฆ

// Only authenticated users can read or write to the bucket
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
การแก้ไข: การเข้าถึงแคบโดยใช้เงื่อนไขการรักษาความปลอดภัย

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

Cloud Firestore

ฐานข้อมูลเรียลไทม์

การจัดเก็บเมฆ

(ฐานข้อมูลเรียลไทม์) กฎที่สืบทอดมาอย่างไม่เหมาะสม

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

ไม่แนะนำ: กฎการกลั่นที่เส้นทางเด็ก
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
การแก้ไข: กฎเขียนที่เส้นทางของผู้ปกครองที่มีความกว้างและให้สิทธิ์เฉพาะเจาะจงมากขึ้นในเส้นทางที่เด็กหากความต้องการเข้าถึงข้อมูลของคุณจำเป็นต้องมีความละเอียดมากขึ้นให้กฎของคุณเม็ด เรียนรู้เพิ่มเติมเกี่ยว cascading เรียลไทม์กฎฐานข้อมูลในการ รักษาความปลอดภัยข้อมูลของคุณ

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

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

Cloud Firestore

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

ฐานข้อมูลเรียลไทม์

{
  "rules": {
    ".read": false,
    ".write": false
  }
}
    

การจัดเก็บเมฆ

// Access to files through Cloud Storage is completely disallowed.
// Files may still be accessible through App Engine or Google Cloud Storage APIs.

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

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

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

ทดสอบกฎความปลอดภัย Cloud Firestore ของคุณ

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

ได้อย่างรวดเร็วตรวจสอบ Firebase กฎการรักษาความปลอดภัยใน Firebase คอนโซลใช้ Firebase กฎจำลอง