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

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

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

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

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

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

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

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

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

खुला एक्सेस

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

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

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

केवल सामग्री स्वामी

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow only authenticated content owners access
    match /some_collection/{document} {
      allow read, write: if request.auth != null && request.auth.uid == request.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 read: if true
      allow write: if request.auth != null && request.auth.uid == request.resource.data.author_uid
    }
  }
}
  

किसी भी प्रमाणित उपयोगकर्ता के लिए प्रवेश

कभी-कभी, क्लाउड फायरस्टोर सुरक्षा नियम यह जांचते हैं कि उपयोगकर्ता लॉग इन है, लेकिन उस प्रमाणीकरण के आधार पर पहुंच को और प्रतिबंधित नहीं करते हैं। यदि आपके किसी नियम में 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
    }
  }
}
  

बंद पहुंच

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

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

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

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

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

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

फायरबेस कंसोल में अपने अपडेट किए गए क्लाउड फायरस्टोर सुरक्षा नियमों का त्वरित परीक्षण करने के लिए, रूल्स प्लेग्राउंड टूल का उपयोग करें।

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