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

इस गाइड की मदद से, Firebase Security Rules कॉन्फ़िगरेशन में मौजूद सामान्य कमज़ोरियों के बारे में जानें. साथ ही, अपने नियमों की समीक्षा करें और उन्हें बेहतर तरीके से सुरक्षित करें. इसके अलावा, नियमों में किए गए बदलावों को डिप्लॉय करने से पहले, उनकी जांच करें.

अगर आपको यह सूचना मिलती है कि आपका डेटा सुरक्षित नहीं है, तो आम तौर पर होने वाली इन गड़बड़ियों की समीक्षा करें और कमज़ोर नियमों को अपडेट करें.

अपने Firebase Security Rules को ऐक्सेस करना

मौजूदा Security Rules को देखने के लिए, Firebase CLI या Firebase कंसोल का इस्तेमाल करें. गलती से अपडेट को ओवरराइट होने से बचाने के लिए, अपने नियमों में बदलाव करने के लिए एक ही तरीके का इस्तेमाल करें. अगर आपको पक्का नहीं है कि आपके स्थानीय तौर पर तय किए गए नियम, हाल ही के अपडेट के मुताबिक हैं या नहीं, तो Firebase कंसोल हमेशा आपके Firebase Security Rules का सबसे हाल ही में डिप्लॉय किया गया वर्शन दिखाता है.

अपने नियमों को Firebase कंसोल से ऐक्सेस करने के लिए, अपना प्रोजेक्ट चुनें. इसके बाद, Realtime Database, Cloud Firestore या Storage पर जाएं. सही डेटाबेस या स्टोरेज बकेट में जाने के बाद, नियम पर क्लिक करें.

Firebase CLI से अपने नियमों को ऐक्सेस करने के लिए, नियमों की फ़ाइल पर जाएं जो आपकी firebase.json फ़ाइल में दी गई है.

समझें Firebase Security Rules

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

अपने ऐप्लिकेशन को डेवलप करते समय और अपने नियमों के लिए अलग-अलग कॉन्फ़िगरेशन की जांच करते समय, स्थानीय डेवलपमेंट एनवायरमेंट में अपने ऐप्लिकेशन को चलाने के लिए, Firebase के स्थानीय एम्युलेटर में से किसी एक का इस्तेमाल करें.

सुरक्षित न होने वाले नियमों से जुड़ी सामान्य समस्याएं

आपके ऐप्लिकेशन को डिप्लॉय करने से पहले, डिफ़ॉल्ट रूप से सेट अप किए गए या ऐप्लिकेशन को डेवलप करते समय सेट अप किए गए Security 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 Firestore

Realtime Database

Cloud Storage

पुष्टि किए गए किसी भी उपयोगकर्ता के लिए ऐक्सेस

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

हमारा सुझाव नहीं है: लॉग-इन किए गए किसी भी उपयोगकर्ता के पास, आपके पूरे डेटाबेस को पढ़ने और लिखने का ऐक्सेस होता है.

Cloud Firestore

service 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 Firestore

Realtime Database

Cloud 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 अब भी आपके डेटाबेस को ऐक्सेस कर सकते हैं. इन नियमों का इस्तेमाल तब करें, जब आपको Cloud Firestore या Realtime Database को सिर्फ़ सर्वर-साइड बैकएंड के तौर पर, Firebase Admin SDK के साथ इस्तेमाल करना हो. यह सुरक्षित है. हालांकि, आपको यह जांच करनी चाहिए कि आपके ऐप्लिकेशन के क्लाइंट, डेटा को सही तरीके से वापस पा सकते हैं या नहीं.

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 का इस्तेमाल करें.