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

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

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

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

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

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

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

प्रमाणीकरण

अपने ऐप को सुरक्षित करने का एक सामान्य पहला कदम है अपने उपयोगकर्ताओं की पहचान करना। इस प्रक्रिया को प्रमाणीकरण कहा जाता है। आप उपयोगकर्ताओं को अपने ऐप में साइन इन करने के लिए फायरबेस प्रमाणीकरण का उपयोग कर सकते हैं। Firebase प्रमाणीकरण में 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> 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"]
    }
  }
}

अगले कदम