Firebase रीयलटाइम डेटाबेस के सुरक्षा नियमों से यह तय होता है कि आपके डेटाबेस को पढ़ने और उसमें बदलाव करने का ऐक्सेस किसके पास है, आपका डेटा कैसे स्ट्रक्चर्ड है, और कौनसे इंडेक्स मौजूद हैं. ये नियम Firebase सर्वर पर लाइव होते हैं और हर समय अपने-आप लागू होते हैं. पढ़ने और लिखने का हर अनुरोध तभी पूरा होगा, जब आपके नियम इसकी अनुमति देंगे. डिफ़ॉल्ट रूप से, आपके नियम किसी को भी आपके डेटाबेस के ऐक्सेस की अनुमति नहीं देते. यह आपके डेटाबेस को गलत इस्तेमाल से तब तक सुरक्षित रखता है, जब तक कि आपको अपने नियमों को पसंद के मुताबिक बनाने या पुष्टि करने की सुविधा सेट अप करने का समय न मिल जाए.
रीयलटाइम डेटाबेस के सुरक्षा नियमों में JavaScript जैसा सिंटैक्स होता है और ये चार तरह के होते हैं:
नियम के टाइप | |
---|---|
.read | इससे यह पता चलता है कि उपयोगकर्ताओं को डेटा पढ़ने की अनुमति है या नहीं. साथ ही, यह भी पता चलता है कि उपयोगकर्ताओं को डेटा कब पढ़ने की अनुमति है. |
.write | इससे पता चलता है कि डेटा को कब और कहां सेव किया जा सकता है. |
.verification | इससे यह तय होता है कि सही फ़ॉर्मैट में दी गई वैल्यू कैसी दिखेगी, उसमें सब-एट्रिब्यूट हैं या नहीं, और डेटा टाइप क्या है. |
.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 से मिला उपयोगकर्ता आईडी है.
{ "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"] } } }
अगले चरण
- अपने डेटाबेस के लिए नियमों के विकास की योजना बनाना शुरू करें.
- सुरक्षा नियमों का इस्तेमाल करके अपना डेटा सुरक्षित करने के बारे में ज़्यादा जानें.
- नियमों का इस्तेमाल करके, इंडेक्स तय करने के बारे में ज़्यादा जानें.