تجنُّب القواعد غير الآمنة

يمكنك استخدام هذا الدليل لفهم الثغرات الشائعة في Firebase Security Rules. ومراجعة القواعد وتأمينها بشكل أفضل واختبارها قبل نشرها

إذا تلقيت تنبيهًا يفيد بأن بياناتك ليست محمية بشكل صحيح، ومراجعة هذه الأخطاء الشائعة وتحديث أي قواعد معرضة للتهديدات.

الوصول إلى Firebase Security Rules

لعرض Rules الحالي، استخدِم إما واجهة سطر الأوامر Firebase أو وحدة التحكّم Firebase احرِص على تعديل القواعد بالطريقة نفسها باستمرار، لتجنب استبدال التحديثات عن طريق الخطأ. إذا لم تكن متأكدًا وما إذا كانت القواعد المحددة محليًا تعكس آخر التحديثات، سيجمع Firebase تعرض وحدة التحكّم دائمًا أحدث إصدار تم نشره من Firebase Security Rules.

للوصول إلى القواعد من وحدة تحكُّم Firebase، اختَر المشروع، ثم الانتقال إلى Realtime Database أو Cloud Firestore أو مساحة التخزين: انقر على القواعد عند الوصول إلى قاعدة البيانات أو مساحة التخزين الصحيحة. دُلو.

للوصول إلى القواعد من واجهة سطر الأوامر "Firebase"، يُرجى الانتقال إلى ملف القواعد المذكور في ملف firebase.json.

فهم Firebase Security Rules

Firebase Security Rules يحمي بياناتك من المستخدمين الضارين. عند إنشاء قاعدة بيانات مثيل أو حزمة Cloud Storage في وحدة التحكّم Firebase، يمكنك اختيار إما رفض الوصول لجميع المستخدمين (وضع القفل) أو منح حق الوصول إلى جميع المستخدمين (وضع الاختبار). بينما قد تحتاج إلى إعدادات أكثر انفتاحًا أثناء التطوير، فتأكد من استغراق الوقت الكافي لتكوين قواعدك تأمين بياناتك قبل نشر التطبيق.

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

السيناريوهات الشائعة مع القواعد غير الآمنة

جهاز Rules الذي قد تكون أعددته تلقائيًا أو وفقًا لما أعددته في البداية الذين عملوا على تطوير تطبيقك، يجب مراجعة وتحديث قبل نشر التطبيق. احرص على تأمين حسابات المستخدمين بشكل صحيح البيانات عن طريق تجنب المشاكل الشائعة التالية.

إتاحة الوصول المفتوح

أثناء إعداد مشروعك في Firebase، قد تكون قد أعددت القواعد للسماح بفتح الوصول إليها أثناء التطوير. قد تعتقد أنك الشخص الوحيد الذي يستخدم ولكن إذا نشرته، فهو متاح على الإنترنت. إذا لم تكن ومصادقة المستخدمين وتهيئة قواعد الأمان، فلن يخمن أي شخص يمكن لرقم تعريف مشروعك سرقة البيانات أو تعديلها أو حذفها.

إجراء غير مقترَح: الإذن بالقراءة والكتابة في جميع المستخدمين.

Cloud Firestore

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this ruleset in production; it allows
// anyone to overwrite your entire database.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

Realtime Database

{
  // Allow read/write access to all users under any conditions
  // Warning: **NEVER** use this ruleset in production; it allows
  // anyone to overwrite your entire database.

  "rules": {
    ".read": true,
    ".write": true
  }
}
    

Cloud Storage

// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with App Engine, this will also make
// files uploaded via App Engine public.
// Warning: This rule makes every file in your Cloud Storage bucket accessible to any user.
// Apply caution before using it in production, since it means anyone
// can overwrite all your files.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}
    
الحل:القواعد التي تقيد القراءة إذن الوصول للكتابة.

ضع قواعد منطقية للتسلسل الهرمي للبيانات. أحد الحلول الشائعة بسبب انعدام الأمان هذا هو الأمان المستنِد إلى المستخدم في "Firebase Authentication". مزيد من المعلومات حول مصادقة المستخدمين باستخدام القواعد.

Cloud Firestore

Realtime Database

Cloud Storage

إذن الوصول لأي مستخدم تمت مصادقته

في بعض الأحيان، يتحقق Rules من أن المستخدم قد سجّل الدخول، ولكن دون إجراء المزيد من الخطوات. تقييد الوصول بناءً على تلك المصادقة. إذا تضمنت إحدى القواعد auth != null، يُرجى تأكيد موافقتك على منح أي مستخدم سجّل دخوله إمكانية الوصول إلى البيانات.

إجراء غير مقترَح: قرأ أي مستخدم سجّل دخوله والكتابة إلى قاعدة البيانات بأكملها.

Cloud Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    match /some_collection/{document} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

Realtime Database

{
  "rules": {
    ".read": "auth.uid !== null",
    ".write": "auth.uid !== null"
  }
}

Cloud Storage

// Only authenticated users can read or write to the bucket
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
الحل:تضييق نطاق الوصول باستخدام الأمان الظروف.

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

Cloud Firestore

Realtime Database

Cloud Storage

(Realtime Database) القواعد المكتسَبة بشكل غير صحيح

سلسلة شلال Realtime Database Security Rules، بقواعد أكثر سطحية، تلغي المسارات الرئيسية قواعد أعمق، وهي العقد الثانوية. عندما تكتب قاعدة في عقدة ثانوية، تذكر يمكنه فقط منح امتيازات إضافية. لا يمكنك تحسين أو إبطال الوصول إلى البيانات في مسار أعمق في قاعدة البيانات الخاصة بك.

إجراء لا يُنصَح به: تحسين القواعد في المسارات الفرعية
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
الحل:كتابة القواعد في المسارات الرئيسية واسعة، وتمنح امتيازات أكثر تحديدًا في المسارات الفرعية إذا كانت متطلبات الوصول إلى البيانات تتطلب المزيد من الدقة، حافِظ على دقة قواعدك. مزيد من المعلومات عن الشلال Realtime Database Security Rules في الأساسية بنية Realtime Database Security Rules.

وصول مغلق

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

Cloud Firestore

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

Realtime Database

{
  "rules": {
    ".read": false,
    ".write": false
  }
}
    

Cloud Storage

// Access to files through Cloud Storage is completely disallowed.
// Files may still be accessible through App Engine or Google Cloud Storage APIs.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }
  }
}

سيظل بإمكان "SDK لمشرفي Firebase" وCloud Functions الوصول إلى بيانات حسابك قاعدة البيانات. استخدِم هذه القواعد عندما تنوي استخدام Cloud Firestore أو Realtime Database كخادم فقط مع Firebase SDK للمشرف. ومع أنّ هذا الوضع آمن، عليك اختبار ما إذا كان يمكن لعملاء تطبيقك واسترداد البيانات بشكل صحيح.

يمكنك الاطّلاع على مزيد من المعلومات حول "Cloud Firestore Security Rules" وطريقة عملها. بدء استخدام "Cloud Firestore Security Rules"

اختبار Cloud Firestore Security Rules

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

للتحقّق من صحة Firebase Security Rules بسرعة في وحدة تحكّم Firebase، استخدِم محاكي قواعد Firebase