قائمة التحقق من أمان Firebase

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

تجنب حركة المرور المسيئة

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

للكشف عن حركة مسيئة، مثل (DOS) هجمات الحرمان من الخدمة، وإنشاء مراقبة وتنبيه ل سحابة Firestore ، قاعدة البيانات في الوقت الحقيقي ، سحابة التخزين ، و استضافة

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

تمكين التحقق من التطبيق

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

تكوين وظائف السحابة الخاصة بك لتوسيع نطاق حركة المرور العادية

تتوسع وظائف السحابة تلقائيًا لتلبية متطلبات تطبيقك ، ولكن في حالة وقوع هجوم ، قد يعني هذا فاتورة كبيرة. لمنع هذا، يمكنك الحد من عدد الحالات المتزامنة وظيفة على أساس حركة المرور العادية للتطبيق.

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

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

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

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

(وإذا كنت تفعل بالصدفه DOS نفسك، undeploy وظيفة عن طريق إزالته من index.js ثم تشغيل firebase deploy --only functions ).

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

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

فهم مفاتيح API

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

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

قم بإعداد تحديد نطاق مفتاح API

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

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

مفاتيح API خلافا لخدمات Firebase، مفاتيح الخادم FCM (تستخدم من قبل تراث FCM HTTP API ) لديهم حساسية ويجب أن تبقى سرية.

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

أيضا مفاتيح API خلافا لخدمات Firebase، خدمة حساب المفاتيح الخاصة (التي تستخدمها SDK الادارية ) حساسة ويجب أن تبقى سرية.

قواعد الأمان

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

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

هذا أحد الإعدادات الافتراضية للمثيلات الجديدة لـ Cloud Firestore (وضع الإنتاج) و Realtime Database (الوضع المقفل). اختر هذا الخيار عند إعداد طبعة قاعدة بيانات جديدة.

بالنسبة إلى Cloud Storage ، ابدأ بتكوين قواعد الأمان مثل ما يلي:

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

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

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

اختبار الوحدة لقواعد الأمان باستخدام Emulator Suite ؛ أضفه إلى CI

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

المصادقة

المصادقة المخصصة: قم بصنع JWTs من بيئة موثوقة (من جانب الخادم)

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

للحصول على مثال باستخدام مصادقة مخصصة مع موفر من جهة خارجية، راجع بلوق وظيفة، مصادقة مع Firebase باستخدام ثمن .

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

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

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

إذا كنت تستخدم خدمة المصادقة البريد الإلكتروني كلمة المرور تمكنت Firebase، وتشديد نظام الحصص الافتراضية لل identitytoolkit.googleapis.com النهاية لمنع وقوع هجمات القوة الغاشمة. يمكنك القيام بذلك من صفحة API في وحدة التحكم سحابة جوجل .

قم بالترقية إلى Cloud Identity Platform للمصادقة متعددة العوامل

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

مصادقة مجهولة

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

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

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

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

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

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

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

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

إدارة البيئة

قم بإعداد مشاريع التطوير والتنفيذ

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

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

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

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

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

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

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

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

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

تثبيت مكتبات المراقبة على أنها مطور أو تبعيات تجريبية

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

إعداد مراقبة الوظائف ؛ تحقق من ذلك بعد تحديثات المكتبة

إذا كنت تستخدم SDK الغيمة وظائف مسجل ، يمكنك مراقبة ويتم تنبيهك من سلوك غير عادي، بما في ذلك السلوك الناجم عن التحديثات المكتبة.

سلامة وظيفة السحابة

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

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

  • لتخزين مفاتيح API Firebase، والتي هي ليس سرا ، فقط تضمينها في التعليمات البرمجية.
  • إذا كنت تستخدم Firebase Admin SDK في وظيفة السحاب ، فلن تحتاج إلى تقديم بيانات اعتماد حساب الخدمة بشكل صريح ، لأن SDK يمكن أن تحصل عليها تلقائيًا أثناء التهيئة.
  • إذا كنت تتصل واجهات برمجة التطبيقات جوجل وجوجل الغيمة التي تتطلب بيانات اعتماد حساب الخدمة، ومكتبة جوجل أصيل للنود.جي إس يمكن الحصول على أوراق الاعتماد هذه من أوراق اعتماد الافتراضي للتطبيق ، والتي يتم ملؤها تلقائيا في وظائف الغيمة.
  • لجعل مفاتيح خاصة وثائق التفويض للخدمات غير جوجل المتاحة لوظائف الغيمة، استخدم سحابة مدير السرية .

تشفير المعلومات الحساسة

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

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

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

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