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

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

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

أنواع القواعد
‎.read تصف ما إذا كان يُسمح للمستخدمين بقراءة البيانات ومتى يُسمح لهم بقراءة البيانات.
.write تصف هذه السمة ما إذا كان يُسمح بكتابة البيانات ومتى.
.Verifyate تحدد الشكل الذي ستبدو عليه القيمة المنسقة بشكل صحيح، سواء كانت وتضم سمات فرعية ونوع البيانات.
.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 على أنها false.

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

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

التحقّق من صحة البيانات

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

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

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

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

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

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

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

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

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

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