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

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

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

الوصول إلى قواعد أمان Firebase

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

للوصول إلى القواعد الخاصة بك من وحدة التحكم Firebase ، حدد مشروعك، ثم انتقل إلى قاعدة البيانات في الوقت الحقيقي، سحابة Firestore أو التخزين. انقر فوق قواعد مرة كنت في الصحيح قاعدة البيانات أو تخزين دلو.

للوصول إلى القواعد الخاصة بك من Firebase CLI، انتقل إلى ملف قواعد لوحظ في الخاص بك ملف firebase.json .

افهم قواعد أمان Firebase

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

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

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

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

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

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

غير موصى بها: قراءة والكتابة الوصول لجميع المستخدمين.

سحابة 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;
    }
  }
}

قاعدة بيانات الوقت الفعلي

{
  // 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
  }
}
    

سحابة التخزين

// 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. معرفة المزيد عن مصادقة المستخدمين مع قواعد .

سحابة Firestore

قاعدة بيانات الوقت الفعلي

سحابة التخزين

الوصول لأي مستخدم مصادق عليه

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

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

سحابة Firestore

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

قاعدة بيانات الوقت الفعلي

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

سحابة التخزين

// 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;
    }
  }
}
الحل: وصول ضيق باستخدام الأوضاع الأمنية.

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

سحابة Firestore

قاعدة بيانات الوقت الفعلي

سحابة التخزين

(قاعدة بيانات الوقت الفعلي) قواعد موروثة بشكل غير صحيح

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

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

وصول مغلق

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

سحابة 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;
    }
  }
}

قاعدة بيانات الوقت الفعلي

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

سحابة التخزين

// 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 Firestore أو Realtime Database كخلفية للخادم فقط جنبًا إلى جنب مع Firebase Admin SDK. بينما يكون آمنًا ، يجب أن تختبر أن عملاء التطبيق يمكنهم استرداد البيانات بشكل صحيح.

معرفة المزيد عن الكلمة الدلالية ضوابط الأمن Firestore وكيفية عملها في الشروع في العمل باستخدام الكلمة الدلالية ضوابط الأمن Firestore .

اختبر قواعد أمان Cloud Firestore

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

للتحقق من صحة بسرعة قواعد الأمن Firebase في وحدة تحكم Firebase، استخدم قواعد محاكي Firebase .