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

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

अपमानजनक ट्रैफ़िक से बचें

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

अपमानजनक ट्रैफ़िक का पता लगाने के लिए, जैसे कि सेवा से इनकार (DOS) हमले, क्लाउड फायरस्टोर , रीयलटाइम डेटाबेस , क्लाउड स्टोरेज और होस्टिंग के लिए निगरानी और चेतावनी सेट करें

यदि आपको अपने एप्लिकेशन पर किसी हमले का संदेह है, तो जितनी जल्दी हो सके सहायता टीम से संपर्क करें और उन्हें बताएं कि क्या हो रहा है।

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

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

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

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

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

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

स्व-खुराक को रोकें: अनुकरणकर्ताओं के साथ स्थानीय रूप से कार्यों का परीक्षण करें

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

(और यदि आप गलती से स्वयं डॉस करते हैं, तो अपने फ़ंक्शन को index.js से हटाकर फिर से firebase deploy --only functions चलाकर अनडिप्लॉय करें।)

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

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

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

फायरबेस सेवाओं के लिए एपीआई कुंजियाँ गुप्त नहीं हैं

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

एपीआई कुंजी स्कोपिंग सेट करें

अनुरोधों को धोखा देने के लिए आपकी एपीआई कुंजी का उपयोग करने का प्रयास करने वाले हमलावर के खिलाफ एक अतिरिक्त निवारक के रूप में, आप अपने ऐप क्लाइंट के दायरे में एपीआई कुंजी बना सकते हैं।

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

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

सेवा खाता कुंजियाँ गुप्त रखें

इसके अलावा फायरबेस सेवाओं के लिए एपीआई कुंजियों के विपरीत, सेवा खाता निजी कुंजियाँ ( एडमिन एसडीके द्वारा प्रयुक्त) संवेदनशील होती हैं और इन्हें गुप्त रखा जाना चाहिए।

सुरक्षा नियम

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

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

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

क्लाउड स्टोरेज के लिए, निम्नलिखित जैसे सुरक्षा नियम कॉन्फ़िगरेशन से शुरुआत करें:

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

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

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

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

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

प्रमाणीकरण

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

यदि आपके पास पहले से ही एक सुरक्षित साइन-इन सिस्टम है, चाहे कस्टम सिस्टम हो या तृतीय-पक्ष सेवा, तो आप फायरबेस सेवाओं के साथ प्रमाणित करने के लिए अपने मौजूदा सिस्टम का उपयोग कर सकते हैं। किसी विश्वसनीय वातावरण से कस्टम JWT बनाएं , फिर अपने क्लाइंट को टोकन भेजें, जो प्रमाणित करने के लिए टोकन का उपयोग करता है ( iOS+ , Android , Web , Unity , C++ )।

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

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

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

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

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

ईमेल-पासवर्ड प्रमाणीकरण: ईमेल गणना सुरक्षा सक्षम करें

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

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

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

अनाम प्रमाणीकरण

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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