استخدِم هذا الدليل لفهم الثغرات الأمنية الشائعة في Firebase Security Rules الإعدادات، ومراجعة قواعدك الخاصة وتحسين أمانها، واختبار التغييرات قبل نشرها.
إذا تلقّيت تنبيهًا يشير إلى أنّ بياناتك غير مؤمَّنة بشكلٍ صحيح، راجِع هذه الأخطاء الشائعة وعدِّل أي قواعد معرَّضة للخطر.
الوصول إلى Firebase Security Rules
لعرض Security Rules الحالية، استخدِم إما Firebase CLI أو Firebase console. تأكَّد من تعديل قواعدك باستخدام الطريقة نفسها باستمرار لتجنُّب الكتابة فوق التعديلات عن طريق الخطأ. إذا لم تكن متأكدًا مما إذا كانت القواعد المحدّدة محليًا تعكس آخر التعديلات، يعرض Firebase console دائمًا آخر إصدار تم نشره من Firebase Security Rules.
للوصول إلى قواعدك من Firebase console، اختَر مشروعك، ثم انتقِل إلى Realtime Database، Cloud Firestore أو التخزين. انقر على القواعد بعد الانتقال إلى قاعدة البيانات أو مساحة التخزين الصحيحة.
للوصول إلى قواعدك من Firebase CLI، انتقِل إلى ملف القواعد الموضّح في ملف firebase.json.
فهم Firebase Security Rules
Firebase Security Rules تحمي بياناتك من المستخدمين الضارين. عند إنشاء مثيل قاعدة بيانات أو مساحة تخزين Cloud Storageفي Firebaseconsole، يمكنك اختيار رفض الوصول إلى جميع المستخدمين (الوضع المقفل) أو منح إذن الوصول إلى جميع المستخدمين (وضع الاختبار). على الرغم من أنّك قد تريد إعدادًا أكثر انفتاحًا أثناء التطوير، تأكَّد من تخصيص بعض الوقت لإعداد قواعدك بشكلٍ صحيح وتأمين بياناتك قبل نشر تطبيقك.
أثناء تطوير تطبيقك واختبار إعدادات مختلفة لقواعدك ، استخدِم أحد محاكيات Firebase المحلية لتشغيل تطبيقك في بيئة تطوير محلية.
السيناريوهات الشائعة التي تتضمّن قواعد غير آمنة
يجب مراجعة Security 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 using 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 FirestoreRealtime DatabaseCloud Storage |
إتاحة إذن الوصول لأي مستخدم تمت مصادقة هويته
في بعض الأحيان، تتحقّق Security Rules من تسجيل دخول المستخدم، ولكنها لا تفرض قيودًا إضافية على إذن الوصول استنادًا إلى عملية المصادقة هذه. إذا كانت إحدى قواعدك تتضمّن auth != null، تأكَّد من أنّك تريد أن يتمكّن أي مستخدم مسجّل الدخول من الوصول إلى البيانات.
لا يُنصح بما يلي: إتاحة إذن القراءة
والكتابة لأي مستخدم مسجّل الدخول في قاعدة بياناتك بالكامل.
Cloud Firestoreservice 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; } } } |
(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 DatabaseRealtime 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; } } }
لا يزال بإمكان حِزم Firebase Admin SDK وCloud Functions الوصول إلى قاعدة بياناتك. استخدِم هذه القواعد عندما تنوي استخدام Cloud Firestore أو Realtime Database كواجهة خلفية للخادم فقط بالتزامن مع حزمة Firebase Admin SDK. على الرغم من أنّها آمنة، عليك اختبار ما إذا كان بإمكان عملاء تطبيقك استرداد البيانات بشكلٍ صحيح.
مزيد من المعلومات عن Cloud Firestore Security Rules وكيفية عملها في البدء باستخدام Cloud Firestore Security Rules.
اختبار Cloud Firestore Security Rules
للتحقّق من سلوك تطبيقك والتحقّق من إعدادات Cloud Firestore Security Rules، استخدِم محاكي Firebase. استخدِم Cloud Firestore المحاكي لتشغيل اختبارات الوحدات وأتمتتها في بيئة محلية قبل نشر أي تغييرات.
للتحقّق بسرعة من Firebase Security Rules في Firebase console، استخدِم محاكي قواعد Firebase.