Google 致力于为黑人社区推动种族平等。查看具体举措
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

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

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

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

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

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

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

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

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

กฎความปลอดภัยของ Firebase ปกป้องข้อมูลของคุณจากผู้ใช้ที่ประสงค์ร้าย เมื่อคุณสร้างอินสแตนซ์ฐานข้อมูลหรือที่เก็บข้อมูล Cloud Storage ในคอนโซล 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
        }
     }
  }
}
วิธีแก้ไข: เขียนกฎที่พา ธ พา ธ ที่กว้างและให้สิทธิ์เฉพาะเจาะจงมากขึ้นที่พา ธ ลูกหากความต้องการในการเข้าถึงข้อมูลของคุณต้องการความละเอียดมากขึ้นให้เก็บกฎของคุณให้ละเอียด เรียนรู้เพิ่มเติมเกี่ยวกับกฎฐานข้อมูลแบบเรียลไทม์แบบเรียงซ้อนในการ รักษาความปลอดภัยข้อมูลของคุณ

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

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

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;
    }
  }
}

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

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

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

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

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