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

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

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

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

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

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

تفعيل App Check

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

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

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

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

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

  • احرص على تتبُّع لوحة بيانات الاستخدام والفوترة dashboard.

  • اضبط تنبيهات بشأن الميزانية لمشروعك لتلقّي إشعارات عندما يتجاوز استخدام الموارد التوقعات.

  • إذا كنت تستخدم Firebase AI Logic وFirebase App Hosting وCloud Functions for Firebase وFirebase Extensions، اضبط حدود الإنفاق لإيقاف الخدمة السارية مؤقتًا إذا بلغ مشروعك الميزانية المحدّدة لتلك الخدمة.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

على عكس مفاتيح واجهة برمجة التطبيقات لخدمات 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 وإضافتها إلى التكامل المستمر (CI)

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

المصادقة

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

إذا كان لديك نظام تسجيل دخول آمن، سواء كان نظامًا مخصّصًا أو خدمة تابعة لجهة خارجية، يمكنك استخدام نظامك الحالي للمصادقة باستخدام خدمات Firebase. يمكنك إنشاء رموز JWT مخصّصة من بيئة موثوق بها، ثم تمرير الرموز إلى العميل الذي يستخدمها للمصادقة (iOS+‎، Android، الويب، 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

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

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

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

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

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

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

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

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

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

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

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

إدارة البيئة

إعداد مشاريع التطوير والتنظيم

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

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

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

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

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

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

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

عدم تعديل المكتبات بدون فهم التغييرات

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

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

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

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

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