Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

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

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

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

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

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

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

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

आप अपने अनुप्रयोग के विकास और अपने नियमों के लिए अलग अलग विन्यास परीक्षण कर रहे हैं के रूप में, में से एक का उपयोग करें स्थानीय Firebase emulators एक स्थानीय विकास के वातावरण में अपने अनुप्रयोग चलाने के लिए।

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

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

खुला उपयोग

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

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

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

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

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

बादल Firestore सुरक्षा नियमों के बारे में जानें और कैसे वे में काम बादल Firestore सुरक्षा नियमों के साथ प्रारंभ करें

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

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

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