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

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

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

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

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

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

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

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

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

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

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

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

खुला एक्सेस

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

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

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

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

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

क्लाउड फायरस्टोर सुरक्षा नियमों के बारे में और जानें कि वे क्लाउड फायरस्टोर सुरक्षा नियमों के साथ आरंभ करने में कैसे काम करते हैं।

अपने क्लाउड फायरस्टोर सुरक्षा नियमों का परीक्षण करें

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

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