استخدِم هذا الدليل للتعرّف على الثغرات الشائعة في إعدادات Cloud Firestore Security Rules ومراجعة قواعدك وتأمينها بشكلٍ أفضل، واختبار التغييرات قبل نشرها.
إذا تلقّيت تنبيهًا يفيد بأنّ قاعدة بيانات Cloud Firestore غير آمنة بشكلٍ صحيح، يمكنك حلّ نقاط الضعف من خلال تعديل Cloud Firestore Security Rules واختباره.
للاطّلاع على قواعد الأمان الحالية، انتقِل إلى علامة التبويب "القواعد" في وحدة تحكّم Firebase.
فهم Cloud Firestore Security Rules
Cloud Firestore Security Rules حماية بياناتك من المستخدمين الضارّين ترفض القواعد التلقائية لأي مثيل Cloud Firestore تم إنشاؤه في وحدة تحكّم Firebase الوصول إلى جميع المستخدمين. لتطوير تطبيقك والوصول إلى قاعدة بياناتك، عليك تعديل هذه القواعد، ويمكنك منح إذن وصول شامل لجميع المستخدمين في بيئة تطوير. قبل نشر تطبيقك في بيئة الإنتاج، عليك تخصيص بعض الوقت لمحاولة ضبط القواعد بشكلٍ صحيح وتأمين بياناتك.
أثناء تطوير تطبيقك واختبار إعدادات مختلفة ل القواعد، استخدِم محاكي Cloud Firestore لتشغيل تطبيقك في بيئة تطوير محلية.
السيناريوهات الشائعة التي تتضمّن قواعد غير آمنة
يجب مراجعة وتعديل Cloud Firestore Security Rules الذي ربما تكون قد أعددته تلقائيًا أو أثناء تطوير تطبيقك باستخدام 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 Authentication. مزيد من المعلومات عن مصادقة المستخدمين باستخدام القواعد |
مالك المحتوى فقط
service cloud.firestore { match /databases/{database}/documents { // Allow only authenticated content owners access match /some_collection/{document} { // Allow reads and deletion if the current user owns the existing document allow read, delete: if request.auth.uid == resource.data.author_uid; // Allow creation if the current user owns the new document allow create: if request.auth.uid == request.resource.data.author_uid; // Allow updates by the owner, and prevent change of ownership allow update: if request.auth.uid == request.resource.data.author_uid && request.auth.uid == 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 public reads allow read: if true // Allow creation if the current user owns the new document allow create: if request.auth.uid == request.resource.data.author_uid; // Allow updates by the owner, and prevent change of ownership allow update: if request.auth.uid == request.resource.data.author_uid && request.auth.uid == resource.data.author_uid; // Allow deletion if the current user owns the existing document allow delete: if request.auth.uid == resource.data.author_uid; } } }
إمكانية الوصول لأي مستخدم تمّت مصادقته
في بعض الأحيان، يتحقّق Cloud Firestore Security Rules من تسجيل دخول المستخدم، ولكن لا يفرض المزيد من
قيود الوصول استنادًا إلى عملية المصادقة هذه. إذا كانت إحدى قواعدك تتضمّن
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 كخلفية للخادم فقط مع "حزمة تطوير البرامج (SDK)" لمدير Firebase. على الرغم من أنّه آمن، يجب اختبار ما إذا كان بإمكان عملاء تطبيقك retrieving retrieving data بشكلٍ سليم.
يمكنك الاطّلاع على مزيد من المعلومات حول Cloud Firestore Security Rules وطريقة عملها في مقالة البدء في استخدام Cloud Firestore Security Rules.
يُرجى مراجعة Cloud Firestore Security Rules.
للتحقّق من سلوك تطبيقك والتأكّد من إعدادات Cloud Firestore Security Rules، استخدِم محاكي Cloud Firestore. استخدِم Cloud Firestore المحاكي لتشغيل اختبارات الوحدة وأتمتة هذه الاختبارات في بيئة محلية قبل نشر أي تغييرات.
لاختبار Cloud Firestore Security Rules المعدَّل بسرعة في "وحدة تحكّم Firebase"، استخدِم أداة Rules Playground.
- لفتح "مساحة اختبار القواعد"، انقر على مساحة اختبار القواعد من علامة التبويب "القواعد".
- في إعدادات Rules playground (مساحة اختبار القواعد)، اختَر خيارات لاختبارك، بما في ذلك:
- اختبار عمليات القراءة أو الكتابة
- موقع جغرافي محدّد في قاعدة بياناتك، كمسار
- نوع المصادقة: مستخدم مجهول غير مصادقة أو مصادقة أو معرّف مستخدم محدّد
- البيانات الخاصة بالمستندات التي تشير إليها قواعدك على وجه التحديد (مثل على سبيل المثال، إذا كانت قواعدك تتطلّب توفُّر حقل معيّن قبل السماح بالكتابة)
- انقر على تشغيل وابحث عن النتائج في البانر أعلى نافذة القواعد.