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

يمكنك استخدام هذا الدليل لفهم الثغرات الشائعة في قواعد أمان 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;
    }
  }
}
الحل:تضييق نطاق الوصول باستخدام الأمان conditions.

عند التحقق من المصادقة، قد تحتاج أيضًا إلى استخدام إحدى من خصائص المصادقة لحصر الوصول على مستخدمين محدّدين بشكل أكبر لمجموعات بيانات محددة. مزيد من المعلومات حول إضافة شروط الأمان الوصول المستند إلى الدور:

الوصول المستند إلى الدور

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 Functions الوصول إ��ى ��يانات ح��ابك قا��دة ��لبيانات. ا��تخدِم هذه القواعد إذا كنت تنوي استخدام Cloud Firestore كخادم فقط مع Firebase SDK للمشرف. ومع أنّ هذا الوضع آمن، عليك اختبار ما إذا كان يمكن لعملاء تطبيقك واسترداد البيانات بشكل صحيح.

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

مراجعة قواعد أمان Cloud Firestore

للتحقّق من سلوك تطبيقك والتحقّق من إعدادات قواعد الأمان في Cloud Firestore، يُرجى اتّباع الخطوات التالية: ويمكنك استخدام محاكي Cloud Firestore. استخدام Cloud Firestore لتشغيل اختبارات الوحدات وتشغيلها آليًا في بيئة محلية قبل نشر هذه التطبيقات حدوث أي تغييرات.

لاختبار قواعد أمان Cloud Firestore المعدّلة بسرعة في وحدة تحكُّم Firebase، استخدِم أداة "مساحة القواعد"

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