أصلح القواعد غير الآمنة

استخدم هذا الدليل لفهم نقاط الضعف الشائعة في تكوينات قواعد أمان 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;
    }
  }
}

لا يزال بإمكان حزم SDK الخاصة بمسؤول Firebase والوظائف السحابية الوصول إلى قاعدة البيانات الخاصة بك. استخدم هذه القواعد عندما تنوي استخدام Cloud Firestore كواجهة خلفية للخادم فقط بالتزامن مع Firebase Admin SDK. وعلى الرغم من كونه آمنًا، إلا أنه يجب عليك اختبار قدرة عملاء تطبيقك على استرداد البيانات بشكل صحيح.

تعرف على المزيد حول قواعد أمان Cloud Firestore وكيفية عملها في بدء استخدام قواعد أمان Cloud Firestore .

تحقق من قواعد أمان Cloud Firestore الخاصة بك

للتحقق من سلوك تطبيقك والتحقق من تكوينات قواعد أمان Cloud Firestore، استخدم محاكي Cloud Firestore . استخدم محاكي Cloud Firestore لتشغيل اختبارات الوحدة وأتمتتها في بيئة محلية قبل نشر أي تغييرات.

لاختبار قواعد أمان Cloud Firestore المحدثة بسرعة في وحدة تحكم Firebase، استخدم أداة Rules Playground.

  1. لفتح ساحة اللعب للقواعد، انقر فوق ساحة اللعب للقواعد من علامة التبويب "القواعد" .
  2. في إعدادات ساحة اللعب الخاصة بالقواعد ، حدد الخيارات الخاصة باختبارك، بما في ذلك:
    • اختبار القراءة أو الكتابة
    • موقع محدد في قاعدة البيانات الخاصة بك، كمسار
    • نوع المصادقة - مستخدم مجهول غير مصادق عليه، أو معرف مستخدم محدد
    • البيانات الخاصة بالمستند والتي تشير قواعدك إليها على وجه التحديد (على سبيل المثال، إذا كانت قواعدك تتطلب وجود حقل معين قبل السماح بالكتابة)
  3. انقر فوق "تشغيل" وابحث عن النتائج في الشعار الموجود أعلى نافذة القواعد.