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

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