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

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

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

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

نظرة عامة على أمان قاعدة البيانات في الوقت الفعلي

توفر قاعدة بيانات 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 على أنها خطأ.

تتضمن قواعد أمان قاعدة البيانات في الوقت الفعلي متغيرات ووظائف مضمنة تسمح لك بالإشارة إلى مسارات أخرى، والطوابع الزمنية من جانب الخادم، ومعلومات المصادقة، والمزيد. فيما يلي مثال لقاعدة تمنح حق الوصول للكتابة للمستخدمين المصادق عليهم إلى /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"]
    }
  }
}

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

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