असुरक्षित नियमों को ठीक करें

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

एआई असिस्टेंस पाने के लिए, यहां दिए गए प्रॉम्प्ट को अपने एआई कोडिंग एजेंट (जैसे, Android Studio में Gemini, Antigravity, Claude Code, Codex, और Cursor) में कॉपी करें. प्रॉम्प्ट को अपनी पसंद के मुताबिक बनाया जा सकता है. साथ ही, एजेंट के साथ मिलकर उसमें बदलाव किया जा सकता है. इंस्टॉल करने के बारे में ज़्यादा जानकारी के लिए, Firebase एजेंट स्किल पर जाएं.

Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me write, validate, and deploy Firebase Security Rules to protect my app's Firestore data.

अगर आपको सूचना मिलती है कि आपका Cloud Firestore डेटाबेस ठीक से सुरक्षित नहीं है, तो Cloud Firestore Security Rules में बदलाव करके और उसकी जांच करके, सुरक्षा से जुड़ी कमियों को ठीक किया जा सकता है.

अपने मौजूदा सुरक्षा नियमों को देखने के लिए, Firebase कंसोल में नियम टैब पर जाएं.

Cloud Firestore Security Rules को समझना

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

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

असुरक्षित नियमों से जुड़ी सामान्य स्थितियां

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

ओपन ऐक्सेस

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

सुझाया नहीं गया: सभी उपयोगकर्ताओं को डेटा को ऐक्सेस करने और उसमें बदलाव करने की अनुमति देना.
// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}
समाधान: ऐसे नियम जो डेटा को पढ़ने और उसमें बदलाव करने के ऐक्सेस को सीमित करते हैं.

ऐसे नियम बनाएं जो आपके डेटा की हैरारकी के हिसाब से सही हों. इस असुरक्षा का एक आम समाधान, Firebase Authentication के साथ उपयोगकर्ता-आधारित सुरक्षा है. नियमों की मदद से उपयोगकर्ताओं की पुष्टि करने के बारे में ज़्यादा जानें.

सिर्फ़ कॉन्टेंट का मालिक

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow only authenticated content owners access
    match /some_collection/{document} {
      // Allow reads and deletion if the current user owns the existing document
      allow read, delete: if request.auth.uid == resource.data.author_uid;
      // Allow creation if the current user owns the new document
      allow create: if request.auth.uid == request.resource.data.author_uid;
      // Allow updates by the owner, and prevent change of ownership
      allow update: if request.auth.uid == request.resource.data.author_uid
                    && request.auth.uid == resource.data.author_uid;

    }
  }
}
  

सार्वजनिक और निजी, दोनों तरह का ऐक्सेस

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow public read access, but only content owners can write
    match /some_collection/{document} {
      // Allow public reads
      allow read: if true
      // Allow creation if the current user owns the new document
      allow create: if request.auth.uid == request.resource.data.author_uid;
      // Allow updates by the owner, and prevent change of ownership
      allow update: if request.auth.uid == request.resource.data.author_uid
                    && request.auth.uid == resource.data.author_uid;
      // Allow deletion if the current user owns the existing document
      allow delete: if request.auth.uid == resource.data.author_uid;
    }
  }
}
  

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

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

सुझाव नहीं दिया गया: लॉग इन किए हुए किसी भी उपयोगकर्ता के पास आपके पूरे डेटाबेस को पढ़ने और उसमें बदलाव करने का ऐक्सेस होता है.
service cloud.firestore {
  match /databases/{database}/documents {
    match /some_collection/{document} {
      allow read, write: if request.auth != null;
    }
  }
}
समाधान: सुरक्षा से जुड़ी शर्तों का इस्तेमाल करके, ऐक्सेस को सीमित करें.

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

रोल के हिसाब से ऐक्सेस

service cloud.firestore {
  match /databases/{database}/documents {
    // Assign roles to all users and refine access based on user roles
    match /some_collection/{document} {
     allow read: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader"
     allow write: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer"

     // Note: Checking for roles in your database using `get` (as in the code
     // above) or `exists` carry standard charges for read operations.
    }
  }
}

एट्रिब्यूट के आधार पर ऐक्सेस

// Give each user in your database a particular attribute
// and set it to true/false
// Then, use that attribute to grant access to subsets of data
// For example, an "admin" attribute set
// to "true" grants write access to data

service cloud.firestore {
  match /databases/{database}/documents {
    match /collection/{document} {
      allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
      allow read: true;
    }
  }
}
  

सार्वजनिक और निजी, दोनों तरह का ऐक्सेस

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow public read access, but only content owners can write
    match /some_collection/{document} {
      allow read: if true
      allow write: if request.auth.uid == request.resource.data.author_uid
    }
  }
}
  

जिन ईमेल पतों की पुष्टि नहीं हुई है उनके लिए ऐक्सेस

कभी-कभी, Cloud Firestore Security Rules यह जांच करते हैं कि किसी उपयोगकर्ता का ईमेल पता किसी खास डोमेन से जुड़ा है या नहीं. आम तौर पर, यह एक अच्छा तरीका है. हालांकि, साइन-इन के दौरान ईमेल पतों की पुष्टि हमेशा नहीं की जाती. इसके लिए, उपयोगकर्ता को पुष्टि करने के लिए भेजे गए ईमेल को पाने के बाद, एक और चरण पूरा करना पड़ता है. पक्का करें कि आपने इस बात की पुष्टि की हो कि ईमेल पता वाकई उपयोगकर्ता का है.

सुझाया नहीं गया: कोई भी उपयोगकर्ता किसी भी ईमेल पते से साइन इन कर सकता है.
service cloud.firestore {
  match /databases/{database}/documents {
    // Allow access based on email domain
    match /some_collection/{document} {
     allow read: if request.auth != null
                 && request.auth.email.endsWith('@example.com')
    }
  }
}
समाधान: ऐक्सेस को सिर्फ़ पुष्टि किए गए ईमेल पतों तक सीमित करें.

ईमेल पतों की पुष्टि करना

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow access based on email domain
    match /some_collection/{document} {
     allow read: if request.auth != null
                 && request.auth.email_verified
                 && request.auth.email.endsWith('@example.com')
    }
  }
}

ऐक्सेस बंद है

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

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

Firebase Admin SDK और Cloud Functions अब भी आपके डेटाबेस को ऐक्सेस कर सकते हैं. इन नियमों का इस्तेमाल तब करें, जब आपको Firebase Admin SDK के साथ Cloud Firestore को सिर्फ़ सर्वर-ओनली बैकएंड के तौर पर इस्तेमाल करना हो. हालांकि, यह सुरक्षित है, लेकिन आपको यह जांच करनी चाहिए कि आपके ऐप्लिकेशन के क्लाइंट, डेटा को सही तरीके से वापस पा सकते हैं या नहीं.

Cloud Firestore Security Rules और उनके काम करने के तरीके के बारे में ज़्यादा जानने के लिए, Cloud Firestore Security Rules का इस्तेमाल शुरू करें पर जाएं.

अपना Cloud Firestore Security Rules देखें

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

Firebase कंसोल में अपडेट किए गए Cloud Firestore Security Rules की तुरंत जांच करने के लिए, Rules Playground टूल का इस्तेमाल करें.

  1. Rules Playground खोलने के लिए, नियम टैब में जाकर, Rules playground पर क्लिक करें.
  2. नियमों के प्लेग्राउंड की सेटिंग में जाकर, अपने टेस्ट के लिए विकल्प चुनें. इनमें ये शामिल हैं:
    • रीड या राइट की जांच करना
    • आपके डेटाबेस में मौजूद कोई खास जगह, पाथ के तौर पर
    • पुष्टि करने का तरीका — पुष्टि नहीं की गई, पुष्टि किया गया अनजान उपयोगकर्ता या कोई खास यूज़र आईडी
    • दस्तावेज़ से जुड़ा डेटा, जिसे आपके नियम खास तौर पर रेफ़र करते हैं. उदाहरण के लिए, अगर आपके नियमों के तहत, डेटा लिखने की अनुमति देने से पहले किसी खास फ़ील्ड की मौजूदगी ज़रूरी है
  3. चलाएं पर क्लिक करें और नियमों की विंडो के ऊपर मौजूद बैनर में नतीजे देखें.