असुरक्षित नियमों से बचें

Firebase सुरक्षा नियम कॉन्फ़िगरेशन में सामान्य कमजोरियों को समझने के लिए इस मार्गदर्शिका का उपयोग करें, अपने स्वयं के नियमों की समीक्षा करें और उन्हें बेहतर ढंग से सुरक्षित करें, और उन्हें लागू करने से पहले अपने परिवर्तनों का परीक्षण करें।

यदि आपको एक अलर्ट मिलता है कि आपका डेटा ठीक से सुरक्षित नहीं है, तो इन सामान्य रूप से की गई त्रुटियों की समीक्षा करें और किसी भी संवेदनशील नियम को अपडेट करें।

अपने फायरबेस सुरक्षा नियमों तक पहुंचें

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

Firebase कंसोल से अपने नियमों तक पहुंचने के लिए, अपना प्रोजेक्ट चुनें, फिर रीयलटाइम डेटाबेस , क्लाउड फायरस्टोर या स्टोरेज पर नेविगेट करें। एक बार जब आप सही डेटाबेस या स्टोरेज बकेट में हों तो नियम पर क्लिक करें।

Firebase CLI से अपने नियमों तक पहुँचने के लिए, अपनी firebase.json फ़ाइल में नोट की गई नियम फ़ाइल पर जाएँ।

Firebase सुरक्षा नियमों को समझें

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

जब आप अपना ऐप विकसित कर रहे हों और अपने नियमों के लिए अलग-अलग कॉन्फ़िगरेशन का परीक्षण कर रहे हों, तो अपने ऐप को स्थानीय विकास परिवेश में चलाने के लिए स्थानीय फायरबेस एमुलेटर में से किसी एक का उपयोग करें।

असुरक्षित नियमों के साथ सामान्य परिदृश्य

हो सकता है कि आपने जिन नियमों को डिफ़ॉल्ट रूप से सेट किया हो या जैसा कि आपने अपने ऐप को विकसित करने पर शुरू में काम किया था, आपके ऐप को परिनियोजित करने से पहले उनकी समीक्षा की जानी चाहिए और उन्हें अपडेट किया जाना चाहिए। सुनिश्चित करें कि आप निम्नलिखित सामान्य नुकसानों से बचकर अपने उपयोगकर्ताओं के डेटा को ठीक से सुरक्षित करते हैं।

खुला एक्सेस

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

अनुशंसित नहीं: सभी उपयोगकर्ताओं के लिए पढ़ने और लिखने की पहुंच।

क्लाउड फायरस्टोर

// 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;
    }
  }
}

रीयलटाइम डेटाबेस

{
  // 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
  }
}
    

बादल भंडारण

// 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 via 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;
    }
  }
}
    
समाधान: नियम जो पढ़ने और लिखने की पहुंच को प्रतिबंधित करते हैं।

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

क्लाउड फायरस्टोर

रीयलटाइम डेटाबेस

बादल भंडारण

किसी भी प्रमाणित उपयोगकर्ता के लिए पहुँच

कभी-कभी, नियम यह जांचते हैं कि कोई उपयोगकर्ता लॉग इन है, लेकिन उस प्रमाणीकरण के आधार पर पहुंच को और प्रतिबंधित नहीं करता है। यदि आपके किसी नियम में auth != null शामिल है, तो पुष्टि करें कि आप चाहते हैं कि कोई भी लॉग-इन उपयोगकर्ता डेटा तक पहुंच बनाए।

अनुशंसित नहीं: किसी भी लॉग-इन उपयोगकर्ता के पास आपके संपूर्ण डेटाबेस तक पढ़ने और लिखने की पहुंच है।

क्लाउड फायरस्टोर

service cloud.firestore {
  match /databases/{database}/documents {
    match /some_collection/{document} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

रीयलटाइम डेटाबेस

{
  "rules": {
    ".read": "auth.uid != null",
    ".write": "auth.uid != null"
  }
}

बादल भंडारण

// 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;
    }
  }
}
समाधान: सुरक्षा स्थितियों का उपयोग करके संकीर्ण पहुंच।

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

क्लाउड फायरस्टोर

रीयलटाइम डेटाबेस

बादल भंडारण

(रीयलटाइम डेटाबेस) गलत तरीके से विरासत में मिले नियम

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

अनुशंसित नहीं: चाइल्ड पाथ
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
. पर नियमों को परिष्कृत करना
समाधान: पैरेंट पाथ पर नियम लिखें जो व्यापक हों, और चाइल्ड पाथ पर अधिक विशिष्ट विशेषाधिकार प्रदान करें यदि आपके डेटा एक्सेस के लिए अधिक विवरण की आवश्यकता है, तो अपने नियमों को विस्तृत रखें। अपने डेटा को सुरक्षित करने में रीयलटाइम डेटाबेस नियमों को कैस्केडिंग करने के बारे में और जानें।

बंद पहुंच

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

क्लाउड फायरस्टोर

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

रीयलटाइम डेटाबेस

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

बादल भंडारण

// 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;
    }
  }
}

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

Cloud Firestore सुरक्षा नियमों के बारे में और जानें कि वे Cloud Firestore सुरक्षा नियमों के साथ आरंभ करें में कैसे काम करते हैं।

अपने Cloud Firestore सुरक्षा नियमों का परीक्षण करें

अपने ऐप के व्यवहार की जांच करने और अपने Cloud Firestore सुरक्षा नियम कॉन्फ़िगरेशन को सत्यापित करने के लिए, Firebase Emulator का उपयोग करें। किसी भी परिवर्तन को लागू करने से पहले स्थानीय वातावरण में यूनिट परीक्षण चलाने और स्वचालित करने के लिए क्लाउड फायरस्टोर एमुलेटर का उपयोग करें।

Firebase कंसोल में Firebase सुरक्षा नियमों को शीघ्रता से सत्यापित करने के लिए, Firebase नियम सिम्युलेटर का उपयोग करें।