قائمة التحقّق من الأمان في Firebase

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

تجنُّب الزيارات المسيئة

إعداد رصد وتنبيهات لخدمات الخلفية

لرصد الزيارات المسيئة، مثل هجمات الحرمان من الخدمات (DOS)، عليك إعداد المراقبة والتنبيهات لكل من Cloud Firestore وRealtime Database وCloud Storage وHosting.

إذا كنت تشك في تعرّض تطبيقك لهجوم، يُرجى التواصل مع فريق الدعم في أقرب وقت ممكن لإبلاغهم بما يحدث.

فعِّل App Check

للمساعدة في ضمان إمكانية وصول تطبيقاتك فقط إلى خدمات الخلفية، فعِّل Firebase App Check لكل خدمة تتيح ذلك.

ضبط إعدادات Cloud Functions لتوسيع نطاقها بما يتناسب مع عدد الزيارات العادي

يتم توسيع نطاق Cloud Functions تلقائيًا لتلبية متطلبات تطبيقك، ولكن في حال حدوث هجوم، قد يؤدي ذلك إلى إصدار فاتورة كبيرة. لمنع حدوث ذلك، يمكنك الحدّ من عدد المثيلات المتزامنة لإحدى الدوال استنادًا إلى عدد الزيارات العادي لتطبيقك.

إعداد التنبيهات لتلقّي إشعارات عند الاقتراب من الحدود القصوى

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

منع هجمات الحرمان من الخدمات الذاتية: اختبار الدوال محليًا باستخدام المحاكيات

قد يكون من السهل أن تقع في خطأ غير مقصود يؤدي إلى إيقاف الخدمة الذاتي أثناء التطوير Cloud Functions، مثلاً من خلال إنشاء حلقة لا نهائية من عمليات الكتابة والتشغيل. يمكنك منع هذه الأخطاء من التأثير في الخدمات المباشرة من خلال إجراء عملية التطوير باستخدام Firebase Local Emulator Suite.

وإذا حدث أن نفّذت هجوم حرمان من الخدمة على نفسك عن طريق الخطأ، يمكنك إلغاء نشر الدالة عن طريق حذفها من index.js ثم تنفيذ الأمر firebase deploy --only functions.

في الحالات التي تكون فيها الاستجابة في الوقت الفعلي أقل أهمية، تعمل الدوال البنيوية بشكل دفاعي

إذا لم تكن بحاجة إلى عرض نتيجة دالة في الوقت الفعلي، يمكنك الحدّ من الزيارات المسيئة من خلال معالجة النتائج على دفعات: يمكنك نشر النتائج في موضوع Pub/Sub، ومعالجة النتائج على فترات منتظمة باستخدام دالة مجدولة.

التعرّف على مفاتيح واجهة برمجة التطبيقات

مفاتيح واجهة برمجة التطبيقات لخدمات Firebase ليست سرية

لا تحدّد مفاتيح واجهة برمجة التطبيقات لخدمات Firebase سوى مشروع Firebase وتطبيقك لتلك الخدمات. يتم التعامل مع التفويض من خلال أذونات Google Cloud لإدارة الهوية وإمكانية الوصول (IAM) وFirebase Security Rules وFirebase App Check.

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

إعداد القيود المفروضة على مفتاح واجهة برمجة التطبيقات

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

استخدِم مفاتيح واجهة برمجة التطبيقات التي تم توفيرها من خلال Firebase فقط مع واجهات برمجة التطبيقات ذات الصلة بـ Firebase. إذا كان تطبيقك يستخدم أي واجهات برمجة تطبيقات أخرى (مثل Places API في "خرائط Google" أو Gemini Developer API)، استخدِم مفتاح واجهة برمجة تطبيقات منفصلاً واحصر استخدامه على واجهة برمجة التطبيقات المعنيّة.

الحفاظ على سرية مفاتيح خادم FCM

على عكس مفاتيح واجهة برمجة التطبيقات لخدمات Firebase، فإنّ FCM مفاتيح الخادم (التي تستخدمها واجهة برمجة التطبيقات القديمة FCM HTTP) تتضمّن معلومات حساسة ويجب الحفاظ على سريتها.

الحفاظ على سرية مفاتيح حساب الخدمة

على عكس مفاتيح واجهة برمجة التطبيقات لخدمات Firebase، فإنّ المفاتيح الخاصة لحسابات الخدمة (المستخدَمة من خلال Firebase Admin SDK) تتضمّن معلومات حساسة ويجب الحفاظ على سريتها.

Firebase Security Rules

تهيئة القواعد في وضع الإنتاج أو وضع القفل

عند إعداد Cloud Firestore وRealtime Database وCloud Storage، عليك ضبط Firebase Security Rules على رفض جميع عمليات الوصول تلقائيًا، ثم إضافة قواعد تمنح إذن الوصول إلى موارد معيّنة أثناء تطوير تطبيقك.

استخدِم أحد الإعدادات التلقائية للحالات الجديدة من Cloud Firestore (وضع الإنتاج) وRealtime Database (الوضع المقفل). بالنسبة إلى Cloud Storage، ابدأ بضبط قواعد الأمان على النحو التالي:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }
  }
}

قواعد الأمان هي مخطط، لذا أضِف قواعد عند إضافة مستندات

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

اختبار قواعد الأمان باستخدام Local Emulator Suite وإضافتها إلى عملية التكامل المستمر

للتأكّد من أنّ قواعد الأمان تتوافق مع عملية تطوير تطبيقك، اختبِر قواعدك باستخدام Firebase Local Emulator Suite وأضِف هذه الاختبارات إلى مسار الدمج المتواصل. اطّلِع على هذه الأدلة حول Cloud Firestore وRealtime Database.

المصادقة

المصادقة المخصّصة: سك رموز JWT من بيئة موثوق بها (من جهة الخادم)

إذا كان لديك نظام تسجيل دخول آمن، سواء كان نظامًا مخصّصًا أو خدمة تابعة لجهة خارجية، يمكنك استخدام نظامك الحالي للمصادقة على خدمات Firebase. إنشاء رموز JWT مخصّصة من بيئة موثوق بها، ثم تمرير الرموز المميزة إلى العميل الذي يستخدم الرمز المميز للمصادقة (iOS+‎ وAndroid وWeb وUnity وC++‎).

للاطّلاع على مثال حول استخدام المصادقة المخصّصة مع موفّر تابع لجهة خارجية، راجِع مشاركة المدونة المصادقة باستخدام Firebase من خلال Okta.

المصادقة المُدارة: موفّرو OAuth 2.0 هم الأكثر أمانًا

إذا كنت تستخدم ميزات المصادقة المُدارة في Firebase، ستكون خيارات موفّر OAuth 2.0 / OpenID Connect (مثل Google وFacebook وما إلى ذلك) هي الأكثر أمانًا. يجب أن توفّر إمكانية استخدام واحد أو أكثر من مقدّمي الخدمات هؤلاء (حسب قاعدة المستخدمين).

المصادقة باستخدام البريد الإلكتروني وكلمة المرور: اضبط حصة صارمة لنقطة نهاية تسجيل الدخول لمنع هجمات القوة العمياء

إذا كنت تستخدم خدمة المصادقة المُدارة من Firebase باستخدام عنوان البريد الإلكتروني وكلمة المرور، عليك تشديد الحصة التلقائية لنقاط النهاية identitytoolkit.googleapis.com لمنع هجمات القوة الغاشمة. يمكنك إجراء ذلك من صفحة Identity Toolkit API في وحدة تحكّم Google Cloud.

المصادقة باستخدام البريد الإلكتروني وكلمة المرور: تفعيل الحماية من تعداد عناوين البريد الإلكتروني

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

الترقية إلى Google Cloud Identity Platform لاستخدام المصادقة المتعدّدة العوامل

لتعزيز مستوى الأمان عند تسجيل الدخول، يمكنك إضافة ميزة المصادقة المتعدّدة العوامل من خلال الترقية إلى Google Cloud Identity Platform. سيظلّ رمز Firebase Authentication الحالي صالحًا للاستخدام بعد الترقية.

المصادقة بدون الكشف عن الهوية

استخدام المصادقة المجهولة فقط لإعداد المستخدمين الجدد

لا تستخدِم المصادقة المجهولة الهوية إلا لحفظ الحالة الأساسية للمستخدمين قبل تسجيل الدخول فعليًا. لا تُعدّ المصادقة بدون تحديد الهوية بديلاً عن تسجيل دخول المستخدم.

تحويل المستخدمين إلى طريقة تسجيل دخول أخرى إذا كانوا يريدون استخدام بياناتهم على أجهزة أخرى

لن تبقى بيانات المصادقة المجهولة الهوية محفوظة إذا محا المستخدم التخزين المحلي أو بدّل الأجهزة. إذا كنت بحاجة إلى الاحتفاظ بالبيانات بعد إعادة تشغيل التطبيق على جهاز واحد، عليك تحويل المستخدم إلى حساب دائم.

استخدام قواعد الأمان التي تتطلّب من المستخدمين التبديل إلى موفّر تسجيل الدخول أو إثبات ملكية عنوان البريد الإلكتروني

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

على سبيل المثال:

allow write: if request.auth.token.firebase.sign_in_provider != "anonymous";
allow write: if request.auth.token.email_verified = true;

Cloud Functions safety

لا تضع أبدًا معلومات حساسة في متغيرات البيئة

في تطبيق Node.js مستضاف ذاتيًا، غالبًا ما تستخدم متغيرات البيئة لاحتواء معلومات حساسة، مثل المفاتيح الخاصة. لا تفعل ذلك في Cloud Functions. بما أنّ Cloud Functions يعيد استخدام البيئات بين عمليات استدعاء الدوال، يجب عدم تخزين المعلومات الحسّاسة في البيئة.

  • لتخزين مفاتيح واجهة برمجة التطبيقات في Firebase (التي ليست سرية)، ما عليك سوى تضمينها في الرمز البرمجي.

  • إذا كنت تستخدم Firebase Admin SDK في Cloud Functions، لن تحتاج إلى تقديم بيانات اعتماد حساب الخدمة بشكل صريح، لأنّ Admin SDK يمكنه الحصول عليها تلقائيًا أثناء عملية الإعداد.

  • إذا كنت تستدعي واجهات برمجة التطبيقات Google Cloud من Google التي تتطلّب بيانات اعتماد حساب الخدمة، يمكن لمكتبة Google Auth لـ Node.js الحصول على بيانات الاعتماد هذه من بيانات الاعتماد التلقائية للتطبيق، والتي يتم ملؤها تلقائيًا في Cloud Functions.

  • لإتاحة المفاتيح الخاصة وبيانات الاعتماد الخاصة بالخدمات غير التابعة لـ Google إلى Cloud Functions، استخدِم Secret Manager.

ترميز المعلومات الحسّاسة

إذا لم يكن بإمكانك تجنُّب تمرير معلومات حساسة إلى الدوال، عليك إيجاد حل مخصّص لتشفير المعلومات.

الدوال البسيطة أكثر أمانًا، وإذا كنت بحاجة إلى تعقيد، يمكنك استخدام Cloud Run

حاوِل أن تجعل وظائفك أساسية وقابلة للفهم قدر الإمكان. يمكن أن يؤدي التعقيد في الدوال إلى حدوث أخطاء يصعب رصدها أو سلوك غير متوقّع.

إذا كنت بحاجة إلى منطق معقّد أو إعدادات بيئة، ننصحك باستخدام Cloud Run بدلاً من Cloud Functions.

إدارة البيئة

إعداد مشاريع التطوير والاختبار

إعداد مشاريع Firebase منفصلة للتطوير والتنظيم والإعداد لا تدمج رمز العميل مع رمز الإنتاج إلا بعد اختباره في مشروع مرحلة العرض.

حصر وصول الفريق إلى بيانات الإنتاج

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

إذا كان فريقك يستخدم Firebase Local Emulator Suite (يُنصح به) في عملية التطوير، قد لا تحتاج إلى منح إذن وصول أوسع إلى مشروع الإنتاج.

إدارة المكتبة

احذر من الأخطاء الإملائية في المكتبة أو من المشرفين الجدد

عند إضافة مكتبات إلى مشروعك، انتبه جيدًا إلى اسم المكتبة والقائمين عليها. قد تحتوي مكتبة تحمل اسمًا مشابهًا للاسم الذي تريد تثبيته على رمز ضار.

لا تحدِّث المكتبات بدون فهم التغييرات

راجِع سجلّات التغيير لأي مكتبات تستخدمها قبل الترقية. تأكَّد من أنّ الترقية تضيف قيمة، وتحقَّق من أنّ القائم بالصيانة لا يزال جهة موثوقة.

تثبيت مكتبات Watchdog كموارد تابعة للتطوير أو الاختبار

استخدِم مكتبة مثل Snyk لفحص مشروعك بحثًا عن تبعيات غير آمنة.

إعداد ميزة التتبّع لحساب Cloud Functions والتحقّق منه بعد تحديثات المكتبة

إذا كنت تستخدم حزمة SDK الخاصة بأداة تسجيل البيانات Cloud Functions، يمكنك تتبُّع السلوك غير المعتاد وتلقّي تنبيهات بشأنه، بما في ذلك السلوك الناتج عن تحديثات المكتبة.