इस गाइड का इस्तेमाल करके, Cloud Firestore Security Rulesकॉन्फ़िगरेशन में मौजूद सामान्य जोखिमों के बारे में जानें. साथ ही, अपने नियमों की समीक्षा करें और उन्हें बेहतर तरीके से सुरक्षित करें. इसके अलावा, बदलावों को लागू करने से पहले उनकी जांच करें.
अगर आपको यह सूचना मिलती है कि आपका Cloud Firestore डेटाबेस सुरक्षित नहीं है, तो 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 टूल का इस्तेमाल करें.
- नियमों को आज़माने की सुविधा खोलने के लिए, नियम टैब में जाकर नियमों को आज़माने की सुविधा पर क्लिक करें.
- नियमों के प्लेग्राउंड की सेटिंग में जाकर, अपने टेस्ट के लिए विकल्प चुनें. इनमें ये विकल्प शामिल हैं:
- पढ़ने या लिखने की जांच करना
- आपके डेटाबेस में मौजूद किसी जगह की जानकारी, पाथ के तौर पर
- पुष्टि करने का टाइप — पुष्टि नहीं की गई, पहचान छिपाकर कॉन्टेंट ऐक्सेस करने वाला उपयोगकर्ता या कोई खास उपयोगकर्ता आईडी
- दस्तावेज़ से जुड़ा ऐसा डेटा जिसे आपके नियमों में खास तौर पर शामिल किया गया है. उदाहरण के लिए, अगर आपके नियमों के मुताबिक किसी फ़ील्ड में डेटा लिखने की अनुमति देने से पहले, उस फ़ील्ड में डेटा मौजूद होना ज़रूरी है
- चलाएं पर क्लिक करें. इसके बाद, नियमों की विंडो के ऊपर मौजूद बैनर में नतीजे देखें.