فهم قواعد أمان قاعدة بيانات Firebase Realtime

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

تحتوي قواعد أمان قاعدة البيانات في الوقت الفعلي على بناء جملة يشبه JavaScript وتأتي في أربعة أنواع:

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

نظرة عامة على أمان Realtime Database

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

تعمل التطبيقات التي تعمل بنظام 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 إلى false.

تتضمن قواعد أمان قاعدة البيانات Realtime متغيرات ووظائف مضمنة تسمح لك بالإشارة إلى مسارات أخرى وطوابع زمنية من جانب الخادم ومعلومات المصادقة والمزيد. في ما يلي مثال على قاعدة تمنح حق الوصول للكتابة إلى /users/<uid>/ ، حيث يمثل <uid> معرّف المستخدم الذي تم الحصول عليه من خلال مصادقة Firebase.

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

تأكيد صحة البيانات

قاعدة بيانات Firebase Realtime غير مخطط لها. هذا يجعل من السهل تغيير الأشياء أثناء التطوير ، ولكن بمجرد أن يصبح تطبيقك جاهزًا للتوزيع ، من المهم أن تظل البيانات متسقة. تتضمن لغة القواعد قاعدة .validate التي تتيح لك تطبيق منطق التحقق باستخدام نفس التعبيرات المستخدمة لقواعد .read .write . الاختلاف الوحيد هو أن قواعد التحقق من الصحة لا تتالي ، لذلك يجب تقييم جميع قواعد التحقق ذات الصلة إلى صحيح حتى يُسمح بالكتابة.

تفرض هذه القاعدة أن البيانات المكتوبة إلى /foo/ يجب أن تكون سلسلة أقل من 100 حرف:

{
  "rules": {
    "foo": {
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

تتمتع قواعد التحقق من الصحة بإمكانية الوصول إلى جميع الوظائف والمتغيرات المضمنة مثل قواعد .read .write . يمكنك استخدام هذه لإنشاء قواعد التحقق من الصحة التي تدرك البيانات الموجودة في مكان آخر في قاعدة البيانات الخاصة بك ، وهوية المستخدم ، ووقت الخادم ، وغير ذلك الكثير.

تحديد فهارس قاعدة البيانات

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

يتم تحديد الفهارس باستخدام قاعدة .indexOn . فيما يلي مثال لإعلان الفهرس الذي سيفهرس حقلي الطول والطول لقائمة الديناصورات:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

الخطوات التالية

  • ابدأ التخطيط لتطوير قواعد قاعدة البيانات الخاصة بك.
  • تعرف على المزيد حول تأمين بياناتك باستخدام قواعد الأمان.
  • تعرف على المزيد حول تحديد الفهارس باستخدام القواعد.