يمكنك استخدام هذا الدليل لفهم الثغرات الأمنية الشائعة في إعدادات Cloud Firestore Security Rules، ومراجعة قواعدك وتأمينها بشكل أفضل، واختبار التغييرات قبل نشرها.
طلب إلى الذكاء الاصطناعي للحصول على مساعدة مستندة إليه
للحصول على مساعدة من الذكاء الاصطناعي، انسخ الطلب أدناه إلى وكيل الترميز بالذكاء الاصطناعي (مثل Gemini في "استوديو Android" وAntigravity وClaude Code وCodex وCursor). يمكنك تخصيص الطلب وتكراره مع الوكيل. انتقِل إلى مهارات وكلاء Firebase للحصول على معلومات مفصّلة عن التثبيت.
Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me write, validate, and deploy Firebase Security Rules to protect my app's Firestore data.
إذا تلقّيت تنبيهًا بأنّ قاعدة بيانات 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
}
}
}
إمكانية الوصول لعناوين البريد الإلكتروني التي لم يتم التحقّق منها
في بعض الأحيان، تتحقّق Cloud Firestore Security Rules من أنّ عنوان البريد الإلكتروني الخاص بالمستخدم ينتمي إلى نطاق معيّن. على الرغم من أنّ هذه ممارسة جيدة بشكل عام، لا يتم دائمًا التحقّق من عناوين البريد الإلكتروني أثناء تسجيل الدخول إلى أن يتّخذ المستخدم خطوة إضافية عند استلام رسالة تأكيد. تأكَّد من التحقّق من أنّ عنوان البريد الإلكتروني يعود إلى المستخدم.
| لا يُنصح به: يمكن لأي مستخدم تسجيل الدخول باستخدام عنوان بريد إلكتروني عشوائي. |
service cloud.firestore { match /databases/{database}/documents { // Allow access based on email domain match /some_collection/{document} { allow read: if request.auth != null && request.auth.email.endsWith('@example.com') } } }
| الحلّ: يمكنك حصر الوصول على عناوين البريد الإلكتروني التي تم التحقّق منها فقط. |
تأكيد عناوين البريد الإلكتروني
service cloud.firestore { match /databases/{database}/documents { // Allow access based on email domain match /some_collection/{document} { allow read: if request.auth != null && request.auth.email_verified && request.auth.email.endsWith('@example.com') } } }
الوصول المغلق
أثناء تطوير تطبيقك، هناك طريقة أخرى شائعة تتمثل في إبقاء بياناتك مقفلة. يعني ذلك عادةً أنّك أغلقت إمكانية الوصول للقراءة والكتابة لجميع المستخدمين، على النحو التالي:
// 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 كخلفية للخادم فقط مع مدير SDK في Firebase. على الرغم من أنّها آمنة، يجب اختبار ما إذا كان بإمكان عملاء تطبيقك استرداد البيانات بشكل صحيح.
يمكنك الاطّلاع على مزيد من المعلومات حول "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.

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