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

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

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

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

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

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

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

प्रमाणीकरण

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

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

प्राधिकार

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

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

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

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

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

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

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

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

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

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

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

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

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

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

अगले कदम