फायरबेस रीयलटाइम डेटाबेस सुरक्षा नियमों को समझें

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

रीयलटाइम डेटाबेस सुरक्षा नियमों में जावास्क्रिप्ट जैसा सिंटैक्स होता है और ये चार प्रकार में आते हैं:

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

रीयलटाइम डेटाबेस सुरक्षा अवलोकन

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

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

प्रमाणीकरण

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

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

प्राधिकार

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

{
  "rules": {
    "foo": {
      ".read": true,
      ".write": false
    }
  }
}

.read और .write नियम कैस्केड होते हैं, इसलिए यह नियम पथ /foo/ पर किसी भी डेटा के साथ-साथ /foo/bar/baz जैसे किसी भी गहरे पथ तक पढ़ने की पहुंच प्रदान करता है। ध्यान दें कि डेटाबेस में उथले .read और .write नियम गहरे नियमों को ओवरराइड करते हैं, इसलिए इस उदाहरण में /foo/bar/baz तक पढ़ने की पहुंच अभी भी दी जाएगी, भले ही पथ /foo/bar/baz पर एक नियम गलत मूल्यांकन किया गया हो।

रीयलटाइम डेटाबेस सुरक्षा नियमों में अंतर्निहित चर और फ़ंक्शन शामिल हैं जो आपको अन्य पथ, सर्वर-साइड टाइमस्टैम्प, प्रमाणीकरण जानकारी और बहुत कुछ संदर्भित करने की अनुमति देते हैं। यहां एक नियम का उदाहरण दिया गया है जो प्रमाणित उपयोगकर्ताओं को /users/<uid>/ तक लिखने की पहुंच प्रदान करता है, जहां <uid> फायरबेस प्रमाणीकरण के माध्यम से प्राप्त उपयोगकर्ता की आईडी है।

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

आंकड़ा मान्यीकरण

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

ये नियम लागू करते हैं कि /foo/ पर लिखा गया डेटा 100 वर्णों से कम की स्ट्रिंग होनी चाहिए:

{
  "rules": {
    "foo": {
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

सत्यापन नियमों में .read और .write नियमों के समान सभी अंतर्निहित कार्यों और चर तक पहुंच होती है। आप इनका उपयोग सत्यापन नियम बनाने के लिए कर सकते हैं जो आपके डेटाबेस में अन्यत्र डेटा, आपके उपयोगकर्ता की पहचान, सर्वर समय और बहुत कुछ के बारे में जानते हैं।

डेटाबेस इंडेक्स को परिभाषित करना

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

इंडेक्स को .indexOn नियम का उपयोग करके निर्दिष्ट किया जाता है। यहां एक उदाहरण सूचकांक घोषणा है जो डायनासोरों की सूची के लिए ऊंचाई और लंबाई क्षेत्रों को अनुक्रमित करेगी:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

अगले कदम