इस गाइड का इस्तेमाल करके, Firebase Security Rulesकॉन्फ़िगरेशन में मौजूद सामान्य जोखिमों के बारे में जानें. साथ ही, अपने नियमों की समीक्षा करें और उन्हें बेहतर तरीके से सुरक्षित करें. इसके अलावा, बदलावों को लागू करने से पहले उनकी जांच करें.
अगर आपको यह सूचना मिलती है कि आपका डेटा सुरक्षित नहीं है, तो आम तौर पर होने वाली इन गड़बड़ियों की समीक्षा करें. साथ ही, सुरक्षा से जुड़ी किसी भी कमज़ोर नियम को अपडेट करें.
अपने Firebase Security Rules को ऐक्सेस करना
अपने मौजूदा Rules देखने के लिए, Firebase CLI या Firebase कंसोल का इस्तेमाल करें. पक्का करें कि नियमों में बदलाव करने के लिए, एक ही तरीके का इस्तेमाल किया जा रहा हो. ऐसा लगातार करें, ताकि गलती से अपडेट ओवरराइट न हो जाएं. अगर आपको यह नहीं पता कि स्थानीय तौर पर तय किए गए नियमों में, हाल ही के अपडेट शामिल हैं या नहीं, तो Firebase कंसोल में हमेशा आपके Firebase Security Rules का हाल ही में डिप्लॉय किया गया वर्शन दिखता है.
Firebase कंसोल से अपने नियमों को ऐक्सेस करने के लिए, अपना प्रोजेक्ट चुनें. इसके बाद, Realtime Database, Cloud Firestore या Storage पर जाएं. सही डेटाबेस या स्टोरेज बकेट में जाने के बाद, नियम पर क्लिक करें.
Firebase सीएलआई से अपने नियमों को ऐक्सेस करने के लिए, अपनी firebase.json फ़ाइल में दी गई नियमों की फ़ाइल पर जाएं.
Firebase Security Rules के बारे में जानकारी
Firebase Security Rules अपने डेटा को हैकर से सुरक्षित रखें. Firebase कंसोल में डेटाबेस इंस्टेंस या Cloud Storage बकेट बनाते समय, आपके पास सभी उपयोगकर्ताओं के लिए ऐक्सेस को अनुमति देने (टेस्ट मोड) या अनुमति न देने (लॉक मोड) का विकल्प होता है. डेवलपमेंट के दौरान, आपको ज़्यादा ओपन कॉन्फ़िगरेशन की ज़रूरत पड़ सकती है. हालांकि, ऐप्लिकेशन को डिप्लॉय करने से पहले, पक्का करें कि आपने अपने नियमों को सही तरीके से कॉन्फ़िगर किया हो और अपने डेटा को सुरक्षित किया हो.
ऐप्लिकेशन डेवलप करते समय और नियमों के लिए अलग-अलग कॉन्फ़िगरेशन की जांच करते समय, लोकल Firebase एम्युलेटर में से किसी एक का इस्तेमाल करके, ऐप्लिकेशन को लोकल डेवलपमेंट एनवायरमेंट में चलाएं.
सुरक्षित नहीं माने जाने वाले नियमों से जुड़ी सामान्य स्थितियां
Rules को डिफ़ॉल्ट रूप से सेट अप किया जा सकता है या ऐप्लिकेशन डेवलप करते समय सेट अप किया जा सकता है. ऐप्लिकेशन को डिप्लॉय करने से पहले, इसकी समीक्षा करें और इसे अपडेट करें. यहां दी गई सामान्य गलतियों से बचकर, यह पक्का करें कि आपने उपयोगकर्ताओं के डेटा को सुरक्षित रखा है.
ओपन ऐक्सेस
Firebase प्रोजेक्ट सेट अप करते समय, आपने डेवलपमेंट के दौरान ओपन ऐक्सेस की अनुमति देने के लिए नियम सेट किए होंगे. आपको लग सकता है कि सिर्फ़ आप ही अपने ऐप्लिकेशन का इस्तेमाल कर रहे हैं. हालांकि, अगर आपने इसे डिप्लॉय किया है, तो यह इंटरनेट पर उपलब्ध है. अगर आपने उपयोगकर्ताओं की पुष्टि नहीं की है और सुरक्षा के नियम कॉन्फ़िगर नहीं किए हैं, तो आपके प्रोजेक्ट आईडी का अनुमान लगाने वाला कोई भी व्यक्ति डेटा चुरा सकता है, उसमें बदलाव कर सकता है या उसे मिटा सकता है.
अनुशंसित नहीं है: सभी उपयोगकर्ताओं के लिए पढ़ने और लिखने का ऐक्सेस.
Cloud Firestore// Allow read/write access to all users under any conditions // Warning: **NEVER** use this ruleset in production; it allows // anyone to overwrite your entire database. service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } } Realtime Database{ // Allow read/write access to all users under any conditions // Warning: **NEVER** use this ruleset in production; it allows // anyone to overwrite your entire database. "rules": { ".read": true, ".write": true } } Cloud Storage// Anyone can read or write to the bucket, even non-users of your app. // Because it is shared with App Engine, this will also make // files uploaded using App Engine public. // Warning: This rule makes every file in your Cloud Storage bucket accessible to any user. // Apply caution before using it in production, since it means anyone // can overwrite all your files. service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write; } } } |
समाधान: पढ़ने और लिखने के ऐक्सेस को सीमित करने वाले नियम.
ऐसे नियम बनाएं जो आपकी डेटा हैरारकी के हिसाब से सही हों. सुरक्षा से जुड़ी इस समस्या को हल करने के लिए, Firebase Authentication के साथ उपयोगकर्ता आधारित सुरक्षा का इस्तेमाल किया जाता है. नियमों की मदद से उपयोगकर्ताओं की पुष्टि करने के बारे में ज़्यादा जानें. Cloud FirestoreRealtime DatabaseCloud Storage |
पुष्टि किए गए किसी भी उपयोगकर्ता के लिए ऐक्सेस
कभी-कभी, Rules यह जांच करते हैं कि उपयोगकर्ता ने लॉग इन किया है या नहीं. हालांकि, वे पुष्टि के आधार पर ऐक्सेस को सीमित नहीं करते. अगर आपके किसी नियम में auth != null
शामिल है, तो पुष्टि करें कि आपको लॉग इन किए हुए किसी भी उपयोगकर्ता को डेटा का ऐक्सेस देना है.
सुझाया नहीं गया है: लॉग इन किए हुए किसी भी उपयोगकर्ता के पास, आपके पूरे डेटाबेस को पढ़ने और उसमें बदलाव करने का ऐक्सेस होता है.
Cloud Firestoreservice cloud.firestore { match /databases/{database}/documents { match /some_collection/{document} { allow read, write: if request.auth.uid != null; } } } Realtime Database{ "rules": { ".read": "auth.uid !== null", ".write": "auth.uid !== null" } } Cloud Storage// Only authenticated users can read or write to the bucket service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } } |
समाधान: सुरक्षा से जुड़ी शर्तों का इस्तेमाल करके, ऐक्सेस को सीमित करें.
पुष्टि की जांच करते समय, आपको पुष्टि करने वाली किसी प्रॉपर्टी का इस्तेमाल करना पड़ सकता है. इससे, खास डेटा सेट के लिए कुछ उपयोगकर्ताओं के ऐक्सेस को और सीमित किया जा सकता है. अलग-अलग प्रमाणीकरण प्रॉपर्टी के बारे में ज़्यादा जानें. Cloud FirestoreRealtime DatabaseCloud Storage |
(Realtime Database) नियमों को सही तरीके से इनहेरिट न करना
Realtime Database Security Rules कैस्केड होता है. इसमें ज़्यादा शैलो और पैरंट पाथ के नियमों को डीपर और चाइल्ड नोड के नियमों पर प्राथमिकता मिलती है. चाइल्ड नोड पर कोई नियम लिखते समय, ध्यान रखें कि इससे सिर्फ़ अतिरिक्त अनुमतियां दी जा सकती हैं. अपने डेटाबेस में किसी पाथ के लिए, डेटा के ऐक्सेस को बेहतर नहीं बनाया जा सकता या उसे रद्द नहीं किया जा सकता.
सुझाया नहीं जाता: चाइल्ड पाथ पर नियमों को बेहतर बनाना
{ "rules": { "foo": { // allows read to /foo/* ".read": "data.child('baz').val() === true", "bar": { /* ignored, since read was allowed already */ ".read": false } } } } |
समाधान: पैरंट पाथ पर ऐसे नियम लिखें जो ज़्यादा से ज़्यादा डेटा को कवर करें. साथ ही, चाइल्ड पाथ पर ज़्यादा खास अधिकार दें अगर आपको डेटा ऐक्सेस करने के लिए ज़्यादा बारीकी से नियम बनाने की ज़रूरत है, तो अपने नियमों को बारीकी से बनाएं. Realtime Database Security Rules के मुख्य सिंटैक्स में कैस्केडिंग Realtime Database Security Rules के बारे में ज़्यादा जानें. |
बंद ऐक्सेस
ऐप्लिकेशन डेवलप करते समय, डेटा को लॉक रखना एक सामान्य तरीका है. आम तौर पर, इसका मतलब यह है कि आपने सभी उपयोगकर्ताओं के लिए, पढ़ने और लिखने के ऐक्सेस को बंद कर दिया है. जैसे:
Cloud Firestore
// Deny read/write access to all users under any conditions service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }
Realtime Database
{ "rules": { ".read": false, ".write": false } }
Cloud Storage
// Access to files through Cloud Storage is completely disallowed. // Files may still be accessible through App Engine or Google Cloud Storage APIs. service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if false; } } }
Firebase Admin SDK टूल और Cloud Functions अब भी आपके डेटाबेस को ऐक्सेस कर सकते हैं. इन नियमों का इस्तेमाल तब करें, जब आपको Firebase Admin SDK के साथ Cloud Firestore या Realtime Database को सर्वर-ओनली बैकएंड के तौर पर इस्तेमाल करना हो. यह सुरक्षित है. हालांकि, आपको यह जांच करनी चाहिए कि आपके ऐप्लिकेशन के क्लाइंट, डेटा को सही तरीके से वापस पा सकते हैं या नहीं.
Cloud Firestore Security Rules और Cloud Firestore Security Rules का इस्तेमाल शुरू करें में इनके काम करने के तरीके के बारे में ज़्यादा जानें.
अपने Cloud Firestore Security Rules की जांच करना
अपने ऐप्लिकेशन के व्यवहार की जांच करने और Cloud Firestore Security Rules कॉन्फ़िगरेशन की पुष्टि करने के लिए, Firebase Emulator का इस्तेमाल करें. किसी भी बदलाव को डिप्लॉय करने से पहले, लोकल एनवायरमेंट में यूनिट टेस्ट चलाने और उन्हें ऑटोमेट करने के लिए, Cloud Firestore इम्यूलेटर का इस्तेमाल करें.
Firebase कंसोल में Firebase Security Rules की तुरंत पुष्टि करने के लिए, Firebase Rules Simulator का इस्तेमाल करें.