تحدّد "قواعد الأمان في قاعدة بيانات 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"]
}
}
}الخطوات التالية
- ابدأ التخطيط لتطوير القواعد لقاعدة البيانات.
- مزيد من المعلومات عن تأمين بياناتك باستخدام قواعد الأمان
- مزيد من المعلومات عن تحديد الفهارس باستخدام القواعد