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

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

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

नियमों के टाइप
.read इससे पता चलता है कि उपयोगकर्ताओं को डेटा पढ़ने की अनुमति है या नहीं और कब है.
.write इससे पता चलता है कि डेटा में बदलाव करने की अनुमति है या नहीं और कब है.
.validate इससे यह तय होता है कि सही तरीके से फ़ॉर्मैट की गई वैल्यू कैसी दिखेगी, उसमें चाइल्ड एट्रिब्यूट हैं या नहीं, और उसका डेटा टाइप क्या है.
.indexOn इससे, क्रम से लगाने और क्वेरी करने के लिए, इंडेक्स करने के लिए चाइल्ड तय किया जाता है.

Realtime Database सुरक्षा की खास जानकारी

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

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

पुष्टि करना

अपने ऐप्लिकेशन को सुरक्षित करने का पहला सामान्य चरण, अपने उपयोगकर्ताओं की पहचान करना है. इस प्रोसेस को पुष्टि करना कहते हैं. आप उपयोगकर्ताओं को अपने ऐप्लिकेशन में साइन इन करने की अनुमति देने के लिए Firebase Authentication का इस्तेमाल कर सकते हैं. Firebase Authentication में, 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 Authentication के ज़रिए हासिल किया गया उपयोगकर्ता का आईडी है.Firebase Authentication

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

डेटा की पुष्टि करना

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

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

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

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

डेटाबेस के इंडेक्स तय करना

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

इंडेक्स तय करने के लिए, .indexOn नियम का इस्तेमाल किया जाता है. यहां इंडेक्स तय करने का एक उदाहरण दिया गया है. इससे डायनासोर की सूची के लिए, ऊंचाई और लंबाई वाले फ़ील्ड को इंडेक्स किया जाएगा:

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

अगले चरण

  • शुरू करें अपने डेटाबेस के लिए, नियमों के डेवलपमेंट की योजना बनाना.
  • सुरक्षा नियमों का इस्तेमाल करके, अपने डेटा को सुरक्षित रखने के बारे में ज़्यादा जानें.
  • नियमों का इस्तेमाल करके, इंडेक्स तय करने के बारे में ज़्यादा जानें.