تحدِّد "قواعد أمان قاعدة بيانات Firebase الآنية الاستجابة" المستخدمين الذين لديهم إذن بالقراءة والكتابة في قاعدة البيانات، وطريقة تنظيم بياناتك، والفهارس المتوفّرة. يتم تطبيق هذه القواعد على خوادم Firebase ويتم فرضها تلقائيًا في جميع الأوقات. لن يتم إكمال أي طلب قراءة وكتابة إلا إذا كانت قواعدك تسمح بذلك. بشكلٍ تلقائي، لا تسمح قواعدك لأيّ مستخدم بالوصول إلى قاعدة بياناتك. ويهدف هذا الإجراء إلى حماية قاعدة بياناتك من إساءة الاستخدام حتى يصبح لديك الوقت لتخصيص القواعد أو إعداد المصادقة.
تتضمّن قواعد أمان "قاعدة بيانات الوقت الفعلي" بنية شبيهة ببنية JavaScript، وهي تأتي بأربعة أنواع:
أنواع القواعد | |
---|---|
.read | تصف ما إذا كان يُسمح للمستخدمين بقراءة البيانات ومتى يُسمح لهم بقراءة البيانات. |
.write | تصف هذه السمة ما إذا كان يُسمح بكتابة البيانات ومتى. |
.validate | تحدّد هذه السمة الشكل الذي ستظهر به القيمة المنسّقة بشكل صحيح، وما إذا كانت تحتوي على سمات فرعية، ونوع البيانات. |
.indexOn | تُستخدَم لتحديد عنصر فرعي للفهرسة من أجل إتاحة الطلب وطلبات البحث. |
نظرة عامة على أمان Realtime Database
يوفّر Firebase Realtime Database مجموعة كاملة من الأدوات لإدارة أمان تطبيقك. وتسهّل هذه الأدوات عملية مصادقة المستخدمين، وفرض أذونات المستخدمين، والتحقق من صحة الإدخالات.
تعمل التطبيقات المستندة إلى Firebase على تشغيل رمز من جهة العميل أكثر من التطبيقات التي تستخدم العديد من مجموعات التكنولوجيا الأخرى. لذلك، قد تكون طريقة تعاملنا مع الأمان مختلفة قليلاً عن المعتاد.
المصادقة
من الخطوات الشائعة الأولى لتأمين تطبيقك هو تحديد هوية المستخدمين. وتُعرف هذه العملية باسم المصادقة. يمكنك استخدام مصادقة Firebase ليطلب من المستخدمين تسجيل الدخول إلى تطبيقك. تتضمن مصادقة Firebase دعمًا فوريًا لطرق المصادقة الشائعة مثل Google وFacebook، بالإضافة إلى تسجيل الدخول إلى البريد الإلكتروني وكلمة المرور، وتسجيل الدخول بهوية مخفية والمزيد.
هوية المستخدم هي مفهوم أمان مهم. يمتلك المستخدمون المختلفون بيانات مختلفة، وفي بعض الأحيان لديهم إمكانات مختلفة. على سبيل المثال، في تطبيق مراسلة، تكون كل رسالة مرتبطة بالمستخدم الذي أنشأها. قد يتمكن المستخدمون أيضًا من حذف رسائلهم الخاصة، ولكن ليس الرسائل التي ينشرها المستخدمون الآخرون.
التفويض
إنّ تحديد هوية المستخدم هو جزء فقط من الأمان. بعد معرفة هوية هؤلاء المستخدمين، تحتاج
إلى طريقة للتحكّم في إمكانية وصولهم إلى البيانات في قاعدة بياناتك. تتيح لك قواعد أمان "قاعدة بيانات الوقت الفعلي"
التحكّم في أذونات الوصول لكل مستخدم. مثلاً، إليك مجموعة من قواعد الأمان التي تسمح لأي مستخدم بقراءة المسار /foo/
، ولكن لا يمكن لأحد الكتابة إليه:
{ "rules": { "foo": { ".read": true, ".write": false } } }
يتم تطبيق قواعد .read
و.write
بشكل متسلسل، لذا تمنح مجموعة القواعد هذه
إذن الوصول للقراءة إلى أي بيانات في المسار /foo/
بالإضافة إلى أي مسارات
أعمق مثل /foo/bar/baz
. يُرجى العِلم أنّ قواعد .read
و
.write
الأقرب إلى السطح في قاعدة البيانات تلغي القواعد الأبعد، لذا
سيظلّ من الممكن منح إذن الوصول للقراءة إلى /foo/bar/baz
في هذا المثال
حتى إذا تم تقييم قاعدة في المسار /foo/bar/baz
على أنّها خطأ.
تتضمّن قواعد أمان "قاعدة بيانات الوقت الفعلي"
متغيّرات مضمّنة
ودوالّ تتيح لك
الإشارة إلى مسارات أخرى وطابعات زمنيّة من جهة الخادم ومعلومات المصادقة وغيرها. في ما يلي مثال على قاعدة تمنح إذن الكتابة
للمستخدمين المعتمَدين في /users/<uid>/
، حيث <uid> هو
رقم تعريف المستخدم الذي تم الحصول عليه من خلال Firebase Authentication.
{ "rules": { "users": { "$uid": { ".write": "$uid === auth.uid" } } } }
التحقّق من صحة البيانات
Firebase Realtime Database لا يتضمّن مخطّطًا. يسهّل ذلك تغيير العناصر أثناء عملية التطوير، ولكن بعد أن يصبح تطبيقك جاهزًا للنشر، من المهم أن تظل البيانات متسقة. تتضمّن لغة القواعد قاعدة .validate
تسمح لك بتطبيق منطق التحقّق باستخدام التعبيرات نفسها المستخدَمة
لقواعد .read
و.write
. ويتمثل الاختلاف الوحيد في أن قواعد التحقق لا تتتابع، لذا يجب تقييم جميع قواعد التحقق ذات الصلة إلى "صحيح" لكي يتم السماح بالكتابة.
تفرض هذه القاعدة أن تكون البيانات المكتوبة إلى /foo/
عبارة عن سلسلة
أقل من 100 حرف:
{ "rules": { "foo": { ".validate": "newData.isString() && newData.val().length < 100" } } }
يمكن لقواعد التحقّق الوصول إلى جميع الدوالّ المضمّنة
والمتغيّرات نفسها المتوفّرة في قواعد .read
و.write
. يمكنك استخدام
هذه القواعد لإنشاء قواعد التحقّق من الصحة التي تكون على دراية بالبيانات في مكان آخر في
قاعدة بياناتك، وهوية المستخدم، ووقت الخادم، وغير ذلك الكثير.
تحديد فهارس قاعدة البيانات
يسمح Firebase Realtime Database بترتيب البيانات وإجراء طلبات بحث عنها. بالنسبة إلى أحجام البيانات الصغيرة، تتيح قاعدة البيانات إجراء طلبات بحث خاصة، لذا لا تكون الفهارس مطلوبة بشكل عام أثناء التطوير. قبل إطلاق تطبيقك، من المهم تحديد الفهارس لأي طلبات بحث لديك لضمان استمرار عملها مع نمو تطبيقك.
يتم تحديد الفهارس باستخدام قاعدة .indexOn
. في ما يلي مثال على بيان
فهرس سيؤدّي إلى فهرسة حقلَي الارتفاع والطول لقائمة
الديناصورات:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
الخطوات التالية
- ابدأ بالتخطيط لتطوير القواعد لقاعدة بياناتك.
- تعرَّف على المزيد من المعلومات حول تأمين بياناتك باستخدام قواعد الأمان.
- اطّلِع على مزيد من المعلومات عن تحديد الفهارس باستخدام القواعد.