फायरबेस सुरक्षा चेकलिस्ट

अपने Firebase संसाधनों और अपने उपयोगकर्ताओं के डेटा को सुरक्षित रखने के लिए, इन दिशानिर्देशों का पालन करें। जरूरी नहीं कि हर आइटम आपकी आवश्यकताओं पर लागू हो, लेकिन अपना ऐप विकसित करते समय उन्हें ध्यान में रखें।

अपमानजनक यातायात से बचें

बैकएंड सेवाओं के लिए निगरानी और अलर्ट सेट करें

इस तरह के डिनायल ऑफ़ सर्विस (डीओएस) हमलों, निगरानी और के लिए चेतावनी की स्थापना के रूप में अपमानजनक यातायात का पता लगाने के लिए, बादल Firestore , रीयलटाइम डाटाबेस , क्लाउड संग्रहण , और होस्टिंग

आप अपने आवेदन पर एक हमले के संदेह है, समर्थन करने के लिए बाहर तक पहुँचने में जल्द ही संभव के रूप में उन्हें पता है क्या हो रहा है यह बताने के लिए।

ऐप चेक सक्षम करें

मदद करने के लिए केवल आपके ऐप्स, अपने बैकएंड सेवाओं का उपयोग कर सकते हैं सक्षम सुनिश्चित अनुप्रयोग चेक का समर्थन करता है यह है कि हर सेवा के लिए।

अपने क्लाउड फ़ंक्शंस को सामान्य ट्रैफ़िक के पैमाने पर कॉन्फ़िगर करें

क्लाउड फ़ंक्शंस स्वचालित रूप से आपके ऐप की मांगों को पूरा करने के लिए स्केल करता है, लेकिन हमले की स्थिति में, इसका मतलब एक बड़ा बिल हो सकता है। इसे रोकने के लिए, आप कर सकते हैं समवर्ती उदाहरणों की संख्या को सीमित एक समारोह अपने अनुप्रयोग के लिए सामान्य यातायात के आधार पर की।

जब सीमा लगभग पूरी हो जाए तो अधिसूचित होने के लिए अलर्ट सेट करें

यदि आपकी सेवा में अनुरोध स्पाइक्स हैं, तो अक्सर कोटा शुरू हो जाएगा, और स्वचालित रूप से आपके एप्लिकेशन पर ट्रैफ़िक को थ्रॉटल कर देगा। सुनिश्चित करें कि आपके नजर रखने के लिए सुनिश्चित करें उपयोग और बिलिंग डैशबोर्ड , लेकिन आप यह भी कर सकते हैं बजट अलर्ट सेट जब संसाधन उपयोग उम्मीदों से अधिक होने पर सूचना प्राप्त अपनी परियोजना पर।

स्व-डॉस को रोकें: एमुलेटर के साथ स्थानीय रूप से परीक्षण कार्य

क्लाउड फ़ंक्शंस विकसित करते समय गलती से खुद को डॉस करना आसान हो सकता है: उदाहरण के लिए, एक अनंत ट्रिगर-राइट लूप बनाकर। आप के साथ अपने विकास कार्य करके लाइव सेवाओं को प्रभावित करने से इन गलतियों को रोका जा सकता है Firebase एमुलेटर सूट

(और तुम से इसे हटाने के द्वारा गलती से डॉस खुद के, कर अपने कार्य undeploy अगर index.js तो चल firebase deploy --only functions ।)

जहां वास्तविक समय की प्रतिक्रिया कम महत्वपूर्ण है, संरचना रक्षात्मक रूप से कार्य करती है

आप वास्तविक समय में एक समारोह का परिणाम पेश करने के लिए की जरूरत नहीं है, तो आप बैचों में परिणाम प्रसंस्करण द्वारा अपमानजनक यातायात के खिलाफ कम कर सकते हैं: एक के लिए परिणाम प्रकाशित Pub / Sub विषय है, और एक साथ नियमित अंतराल पर परिणाम की प्रक्रिया अनुसूचित समारोह .

एपीआई कुंजियों को समझें

Firebase सेवाओं के लिए API कुंजियां गुप्त नहीं हैं

Firebase उपयोग करता API कुंजियां केवल Firebase सेवाओं लिए अपने ऐप की Firebase परियोजना की पहचान करने, और डेटाबेस या क्लाउड संग्रहण डेटा है, जो उपयोग किया जाता है करने के लिए नियंत्रण का उपयोग करने के लिए नहीं Firebase सुरक्षा नियम । इस कारण से, आपको Firebase सेवाओं के लिए API कुंजियों को गुप्त रखने की आवश्यकता नहीं है, और आप उन्हें क्लाइंट कोड में सुरक्षित रूप से एम्बेड कर सकते हैं। बारे में और जानें Firebase के लिए एपीआई कुंजी

API कुंजी स्कोपिंग सेट करें

एक हमलावर के खिलाफ एक अतिरिक्त निवारक हंसोड़ अनुरोध करने के लिए अपनी API कुंजी उपयोग करने का प्रयास किया है, आप API कुंजियां बना सकते हैं अपने अनुप्रयोग ग्राहकों के दायरे वाला

FCM सर्वर कुंजियों को गुप्त रखें

Firebase सेवाओं के लिए विपरीत API कुंजियां, FCM सर्वर कुंजियों (द्वारा प्रयोग किया जाता विरासत FCM HTTP एपीआई ) के प्रति संवेदनशील हैं और गुप्त रखा जाना चाहिए।

सेवा खाता कुंजी गुप्त रखें

इसके अलावा Firebase सेवाओं के लिए विपरीत API कुंजियां, सेवा खाता निजी कुंजी (द्वारा प्रयोग किया जाता नियंत्रक SDK ) संवेदनशील होते हैं और गुप्त रखा जाना चाहिए।

सुरक्षा नियम

उत्पादन या लॉक मोड में नियमों को प्रारंभ करें

जब आप क्लाउड फायरस्टोर, रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सेट करते हैं, तो डिफ़ॉल्ट रूप से सभी एक्सेस को अस्वीकार करने के लिए अपने सुरक्षा नियमों को प्रारंभ करें, और ऐसे नियम जोड़ें जो आपके ऐप को विकसित करते समय विशिष्ट संसाधनों तक पहुंच प्रदान करते हैं।

क्लाउड फायरस्टोर (उत्पादन मोड) और रीयलटाइम डेटाबेस (लॉक मोड) के नए उदाहरणों के लिए यह डिफ़ॉल्ट सेटिंग्स में से एक है। नया डेटाबेस इंस्टेंस सेट करते समय इस विकल्प को चुनें।

क्लाउड स्टोरेज के लिए, निम्न की तरह सुरक्षा नियम कॉन्फ़िगरेशन के साथ प्रारंभ करें:

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

सुरक्षा नियम एक स्कीमा हैं; जब आप दस्तावेज़ जोड़ते हैं तो नियम जोड़ें

एक प्रकार के लॉन्च-पूर्व कार्य के रूप में अपना ऐप लिखने के बाद सुरक्षा नियम न लिखें। इसके बजाय, जब आप अपना ऐप लिखते हैं, तो उन्हें डेटाबेस स्कीमा की तरह मानते हुए सुरक्षा नियम लिखें: जब भी आपको किसी नए दस्तावेज़ प्रकार या पथ संरचना का उपयोग करने की आवश्यकता हो, तो पहले उसका सुरक्षा नियम लिखें।

एमुलेटर सूट के साथ यूनिट टेस्ट सुरक्षा नियम; इसे सीआई में जोड़ें

सुनिश्चित करें कि आपके सुरक्षा नियमों को अपने ऐप्लिकेशन के विकास, इकाई परीक्षण के साथ अपने नियमों के साथ रख रहे हैं करने के लिए Firebase एमुलेटर सूट और अपने सीआई पाइप लाइन के लिए इन परीक्षणों जोड़ें। के लिए इन गाइड देखें बादल Firestore और रीयलटाइम डाटाबेस

प्रमाणीकरण

कस्टम प्रमाणीकरण: एक विश्वसनीय (सर्वर-साइड) वातावरण से टकसाल JWTs

यदि आपके पास पहले से एक सुरक्षित साइन-इन सिस्टम है, चाहे वह कस्टम सिस्टम हो या कोई तृतीय-पक्ष सेवा, तो आप अपने मौजूदा सिस्टम का उपयोग Firebase सेवाओं के साथ प्रमाणित करने के लिए कर सकते हैं। कस्टम JWTs बनाएं एक विश्वसनीय वातावरण से, तो अपने ग्राहक है, जो प्रमाणित करने के लिए टोकन का उपयोग करता है (करने के लिए टोकन पारित आईओएस + , एंड्रॉयड , वेब , एकता , सी ++ )।

एक तीसरे पक्ष के प्रदाता के साथ कस्टम प्रमाणीकरण का उपयोग का एक उदाहरण के लिए, ब्लॉग पोस्ट, देखने में Firebase Okta उपयोग करने के साथ प्रमाणित

प्रबंधित प्रमाणीकरण: OAuth 2.0 प्रदाता सबसे सुरक्षित हैं

यदि आप Firebase की प्रबंधित प्रमाणीकरण सुविधाओं का उपयोग करते हैं, तो OAuth 2.0 / OpenID Connect प्रदाता विकल्प (Google, Facebook, आदि) सबसे सुरक्षित हैं। यदि आप कर सकते हैं (आपके उपयोगकर्ता आधार के आधार पर) आपको इनमें से एक या अधिक प्रदाताओं का समर्थन करना चाहिए।

ईमेल-पासवर्ड प्रमाणीकरण: क्रूर बल के हमलों को रोकने के लिए साइन-इन समापन बिंदु के लिए तंग कोटा निर्धारित करें

आप Firebase के प्रबंधित ईमेल पासवर्ड प्रमाणीकरण सेवा का उपयोग करते हैं, के डिफ़ॉल्ट कोटा कस identitytoolkit.googleapis.com जानवर बल हमलों को रोकने के अंतिम बिंदु। आप से ऐसा कर सकते हैं Google क्लाउड कंसोल में एपीआई पेज

बहु-कारक प्रमाणीकरण के लिए क्लाउड पहचान प्लेटफ़ॉर्म पर अपग्रेड करें

साइन-इन पर अतिरिक्त सुरक्षा के लिए, आप करने के लिए उन्नयन द्वारा बहु कारक प्रमाणीकरण समर्थन जोड़ सकते हैं बादल पहचान मंच । अपग्रेड करने के बाद भी आपका मौजूदा फायरबेस प्रमाणीकरण कोड काम करता रहेगा।

बेनामी प्रमाणीकरण

गर्मजोशी से ऑनबोर्डिंग के लिए केवल अनाम प्रमाणीकरण का उपयोग करें

उपयोगकर्ताओं के वास्तव में साइन इन करने से पहले उनकी मूल स्थिति को सहेजने के लिए केवल अनाम प्रमाणीकरण का उपयोग करें। अनाम प्रमाणीकरण उपयोगकर्ता साइन-इन के लिए प्रतिस्थापन नहीं है।

यदि उपयोगकर्ता अपना फ़ोन खो जाने पर डेटा चाहते हैं, तो उन्हें किसी अन्य साइन-इन विधि में कनवर्ट करें

यदि उपयोगकर्ता स्थानीय संग्रहण को साफ़ करता है या डिवाइस स्विच करता है, तो अनाम प्रमाणीकरण डेटा जारी नहीं रहेगा। आप एक ही डिवाइस पर ऐप पुन: प्रारंभ परे डेटा जारी रहती है की जरूरत है, एक स्थायी खाते में उपयोगकर्ता को परिवर्तित

उन सुरक्षा नियमों का उपयोग करें जिनके लिए उपयोगकर्ताओं को साइन इन प्रदाता में परिवर्तित होना पड़ता है या उनके ईमेल को सत्यापित करना होता है

आपके प्रोजेक्ट में कोई भी एक अनाम खाता बना सकता है। इसे ध्यान में रखते, के साथ सभी गैर सरकारी डेटा की रक्षा सुरक्षा नियम है कि विशिष्ट साइन-इन तरीकों या सत्यापित ईमेल पतों की आवश्यकता होती है

उदाहरण के लिए:

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

पर्यावरण प्रबंधन

विकास और मंचन परियोजनाएं स्थापित करें

विकास, मंचन और उत्पादन के लिए अलग-अलग Firebase प्रोजेक्ट स्थापित करें। क्लाइंट कोड को उत्पादन में तब तक मर्ज न करें जब तक कि स्टेजिंग प्रोजेक्ट के विरुद्ध इसका परीक्षण न हो जाए।

उत्पादन डेटा तक टीम की पहुंच सीमित करें

आप एक बड़ी टीम के साथ काम करते हैं, तो आप या तो का उपयोग कर उत्पादन डेटा तक पहुँच को सीमित करके गलतियों और उल्लंघनों के परिणामों को कम कर सकते हैं पूर्वनिर्धारित भूमिकाओं या कस्टम IAM भूमिकाओं।

यदि आपकी टीम विकास के लिए एमुलेटर सूट का उपयोग करती है, तो हो सकता है कि आपको उत्पादन परियोजना तक व्यापक पहुंच प्रदान करने की आवश्यकता न हो।

पुस्तकालय प्रबंधन

पुस्तकालय की गलत वर्तनी या नए अनुरक्षकों से सावधान रहें

अपनी परियोजना में पुस्तकालय जोड़ते समय, पुस्तकालय के नाम और उसके अनुरक्षकों पर पूरा ध्यान दें। जिस लाइब्रेरी को आप इंस्टॉल करना चाहते हैं, उसके समान नाम वाली लाइब्रेरी में दुर्भावनापूर्ण कोड हो सकता है।

परिवर्तनों को समझे बिना पुस्तकालयों को अद्यतन न करें

अपग्रेड करने से पहले आपके द्वारा उपयोग की जाने वाली किसी भी लाइब्रेरी के परिवर्तन लॉग देखें। सुनिश्चित करें कि अपग्रेड मूल्य जोड़ता है, और जांचें कि रखरखाव अभी भी एक पार्टी है जिस पर आप भरोसा करते हैं।

वॉचडॉग लाइब्रेरी को देव या परीक्षण निर्भरता के रूप में स्थापित करें

के रूप में एक पुस्तकालय में इस तरह का प्रयोग करें Snyk असुरक्षित निर्भरता के लिए अपनी परियोजना को स्कैन करने के।

कार्यों के लिए निगरानी स्थापित करें; लाइब्रेरी अपडेट के बाद इसे चेक करें

आप का उपयोग करते हैं बादल कार्य लकड़हारा एसडीके , आप कर सकते हैं पर नजर रखने और सतर्क किया , असामान्य व्यवहार के पुस्तकालय अद्यतन की वजह से व्यवहार भी शामिल है।

क्लाउड फंक्शन सुरक्षा

क्लाउड फ़ंक्शन के पर्यावरण चर में कभी भी संवेदनशील जानकारी न डालें

अक्सर एक स्व-होस्ट किए गए Node.js ऐप में, आप निजी कुंजी जैसी संवेदनशील जानकारी रखने के लिए पर्यावरण चर का उपयोग करते हैं। बादल कार्य में ऐसा मत करो। चूंकि क्लाउड फ़ंक्शन फ़ंक्शन आमंत्रणों के बीच परिवेशों का पुन: उपयोग करता है, इसलिए संवेदनशील जानकारी को परिवेश में संग्रहीत नहीं किया जाना चाहिए।

  • Firebase API कुंजियां, जो कर रहे हैं स्टोर करने के लिए गुप्त नहीं , बस उन्हें कोड में एम्बेड।
  • यदि आप क्लाउड फ़ंक्शन में फायरबेस व्यवस्थापक एसडीके का उपयोग कर रहे हैं, तो आपको स्पष्ट रूप से सेवा खाता प्रमाण-पत्र प्रदान करने की आवश्यकता नहीं है, क्योंकि एसडीके स्वचालित रूप से आरंभीकरण के दौरान उन्हें प्राप्त कर सकता है।
  • आप गूगल और Google क्लाउड एपीआई कि सेवा खाता क्रेडेंशियल की आवश्यकता कॉल कर रहे हैं, Node.js के लिए गूगल प्रमाणीकरण पुस्तकालय से इन क्रेडेंशियल्स प्राप्त कर सकते हैं आवेदन डिफ़ॉल्ट क्रेडेंशियल्स , जो स्वत: बादल कार्य में भर जाती है।
  • आपका क्लाउड कार्य करने के लिए उपलब्ध गैर- Google सेवाओं के लिए निजी कुंजी और साख बनाने के लिए, का उपयोग बादल गुप्त प्रबंधक

संवेदनशील जानकारी एन्क्रिप्ट करें

यदि आप अपने क्लाउड फ़ंक्शन को संवेदनशील जानकारी भेजने से नहीं बच सकते हैं, तो आपको जानकारी को एन्क्रिप्ट करने के लिए अपने स्वयं के कस्टम समाधान के साथ आना होगा।

सरल कार्य सुरक्षित हैं; यदि आपको जटिलता की आवश्यकता है, तो क्लाउड रन पर विचार करें

अपने क्लाउड फ़ंक्शंस को यथासंभव सरल और समझने योग्य रखने का प्रयास करें। आपके कार्यों में जटिलता अक्सर हार्ड-टू-स्पॉट बग या अप्रत्याशित व्यवहार का कारण बन सकती है।

आप की जरूरत जटिल तर्क या पर्यावरण विन्यास है, तो उपयोग करने पर विचार बादल भागो बजाय बादल कार्य की।