Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

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

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

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

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

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

अपमानजनक ट्रैफ़िक का पता लगाने के लिए, जैसे कि डिनायल-ऑफ-सर्विस (DOS) हमले, Cloud Firestore , Realtime Database , Cloud Storage और Hosting के लिए निगरानी और अलर्ट सेट अप करें

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

सुरक्षा नियम

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

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

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

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

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

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

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

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

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

प्रमाणीकरण

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 ऐप में, आप निजी कुंजी जैसी संवेदनशील जानकारी रखने के लिए पर्यावरण चर का उपयोग करते हैं। Cloud Functions में ऐसा न करें । चूंकि क्लाउड फ़ंक्शन फ़ंक्शन आमंत्रणों के बीच परिवेशों का पुन: उपयोग करता है, इसलिए संवेदनशील जानकारी को परिवेश में संग्रहीत नहीं किया जाना चाहिए।

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

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

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

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

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

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