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

बुनियादी सुरक्षा नियम

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

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

अपने नियमों को अद्यतन करने के लिए उपयोग कर सकते हैं और, चरणों में उल्लिखित निर्देशों का पालन का प्रबंधन और तैनात Firebase सुरक्षा नियम

डिफ़ॉल्ट नियम: लॉक मोड

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

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

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

रीयलटाइम डेटाबेस

{
  "rules": {
    ".read": false,
    ".write": false
  }
}

घन संग्रहण

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

विकास-पर्यावरण नियम

जब आप अपने ऐप पर काम कर रहे हों, तो हो सकता है कि आप अपने डेटा तक अपेक्षाकृत खुली या निरंकुश पहुंच चाहते हों। अपने ऐप को प्रोडक्शन में तैनात करने से पहले बस अपने नियमों को अपडेट करना सुनिश्चित करें। यह भी याद रखें कि अगर आप अपने एप्लिकेशन को तैनात है, यह सार्वजनिक रूप से सुलभ है - भले ही आप इसे लॉन्च नहीं किया है।

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

सभी प्रमाणित उपयोगकर्ता

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

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

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

रीयलटाइम डेटाबेस

{
  "rules": {
    ".read": "auth.uid != null",
    ".write": "auth.uid != null"
  }
}

घन संग्रहण

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

उत्पादन के लिए तैयार नियम

जब आप अपने ऐप को परिनियोजित करने की तैयारी करते हैं, तो सुनिश्चित करें कि आपका डेटा सुरक्षित है और यह एक्सेस आपके उपयोगकर्ताओं को उचित रूप से दी गई है। उत्तोलन प्रमाणीकरण उपयोगकर्ता-आधारित पहुँच की स्थापना की और डेटा-आधारित पहुँच स्थापित करने के लिए अपने डेटाबेस से सीधे पढ़ने के लिए।

अपने डेटा की संरचना करते समय नियम लिखने पर विचार करें, क्योंकि जिस तरह से आप अपने नियमों को सेट करते हैं, वह प्रभावित करता है कि आप विभिन्न रास्तों पर डेटा तक कैसे पहुंच को प्रतिबंधित करते हैं।

केवल सामग्री-स्वामी पहुंच

ये नियम केवल सामग्री के प्रमाणीकृत स्वामी तक पहुंच को प्रतिबंधित करते हैं। डेटा केवल एक उपयोगकर्ता द्वारा पठनीय और लिखने योग्य होता है, और डेटा पथ में उपयोगकर्ता की आईडी होती है।

जब इस नियम काम करता है: यह नियम अच्छी तरह से काम डेटा उपयोगकर्ता द्वारा डाल दिए है - अगर जरूरत है डेटा का उपयोग करने कि केवल उपयोगकर्ता एक ही उपयोगकर्ता है कि डेटा बनाई गई है।

जब इस नियम काम नहीं करता है: - उन डेटा को अधिलेखित या उपयोग डेटा वे बना लिया है करने में असमर्थ होगा यह नियम-सेट जब एकाधिक उपयोगकर्ताओं लिखने की जरूरत है या एक ही डेटा नहीं पढ़ा काम करता है।

इस नियम सेट करने के लिए: एक नियम कि पुष्टि के उपयोगकर्ता पहुँच का अनुरोध कर पढ़ने के लिए या लिखने डेटा उपयोगकर्ता उस डेटा का मालिक है बनाएँ।

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

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow only authenticated content owners access
    match /some_collection/{userId}/{documents=**} {
      allow read, write: if request.auth != null && request.auth.uid == userId
    }
  }
}

रीयलटाइम डेटाबेस

{
  "rules": {
    "some_path": {
      "$uid": {
        // Allow only authenticated content owners access to their data
        ".read": "auth != null && auth.uid == $uid"
        ".write": "auth != null && auth.uid == $uid"
      }
    }
  }
}

घन संग्रहण

// Grants a user access to a node matching their user ID
service firebase.storage {
  match /b/{bucket}/o {
    // Files look like: "user/<UID>/path/to/file.txt"
    match /user/{userId}/{allPaths=**} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

मिश्रित सार्वजनिक और निजी पहुंच

यह नियम किसी को भी डेटा सेट को पढ़ने की अनुमति देता है, लेकिन किसी दिए गए पथ पर डेटा बनाने या संशोधित करने की क्षमता को केवल प्रमाणित सामग्री स्वामी के लिए प्रतिबंधित करता है।

जब इस नियम काम करता है: यह नियम है कि सार्वजनिक रूप से पठनीय तत्वों की आवश्यकता क्षुधा के लिए अच्छी तरह से काम है, लेकिन उन तत्वों के स्वामियों को संपादित करने की अनुमति को प्रतिबंधित करने की जरूरत है। उदाहरण के लिए, एक चैट ऐप या ब्लॉग।

जब इस नियम काम नहीं करता है: सामग्री के मालिक की तरह ही नियम है, इस नियम-सेट काम जब एक से अधिक उपयोगकर्ता एक ही डेटा को संपादित करने की जरूरत नहीं है। उपयोगकर्ता अंततः एक दूसरे के डेटा को अधिलेखित कर देंगे।

इस नियम सेट करने के लिए: एक नियम है कि सभी उपयोगकर्ताओं (या सभी प्रमाणीकृत उपयोगकर्ताओं), और पुष्टि उपयोगकर्ता लेखन डेटा मालिक है के लिए पढ़ने के लिए पहुँच सक्षम बनाएं।

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

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 create: if request.auth.uid == request.resource.data.author_uid;
      allow update, delete: if request.auth.uid == resource.data.author_uid;
    }
  }
}

रीयलटाइम डेटाबेस

{
// Allow anyone to read data, but only authenticated content owners can
// make changes to their data

  "rules": {
    "some_path": {
      "$uid": {
        ".read": true,
        // or ".read": "auth.uid != null" for only authenticated users
        ".write": "auth.uid == $uid"
      }
    }
  }
}

घन संग्रहण

service firebase.storage {
  match /b/{bucket}/o {
    // Files look like: "user/<UID>/path/to/file.txt"
    match /user/{userId}/{allPaths=**} {
      allow read;
      allow write: if request.auth.uid == userId;
    }
  }
}

विशेषता-आधारित और भूमिका-आधारित पहुंच

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

जब इस नियम काम करता है: आप उपयोगकर्ताओं के लिए एक भूमिका सौंपते समय कर रहे हैं, इस नियम आसान पहुंच को सीमित करते भूमिकाओं या उपयोगकर्ताओं के विशिष्ट समूहों के आधार पर बनाता है। उदाहरण के लिए, यदि आप ग्रेड संग्रहीत कर रहे थे, तो आप "छात्र" समूह (केवल उनकी सामग्री पढ़ें), "शिक्षक" समूह (उनके विषय में पढ़ें और लिखें), और "प्रिंसिपल" समूह (पढ़ें) के लिए अलग-अलग पहुंच स्तर असाइन कर सकते हैं। सभी सामग्री)।

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

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

तुम भी सेट कर सकते हैं प्रमाणीकरण में कस्टम का दावा है और उसके बाद से उस जानकारी को पुनः प्राप्त auth.token किसी भी Firebase सुरक्षा नियमों में चर।

डेटा-परिभाषित विशेषताएँ और भूमिकाएँ

ये नियम केवल Cloud Firestore और Realtime Database में काम करते हैं।

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

याद रखें कि जब भी आपके नियमों में कोई पठन शामिल होता है, तो नीचे दिए गए नियमों की तरह, आपको Cloud Firestore में पढ़ने की कार्रवाई के लिए बिल भेजा जाता है।

service cloud.firestore {
  match /databases/{database}/documents {
    // For attribute-based access control, Check a boolean `admin` attribute
    allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
    allow read: true;

    // Alterntatively, for role-based access, assign specific roles to users
    match /some_collection/{document} {
     allow read: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader"
     allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer"
   }
  }
}

रीयलटाइम डेटाबेस

{
  "rules": {
    "some_path": {
      "${subpath}": {
        //
        ".write": "root.child('users').child(auth.uid).child('role').val() == 'admin'",
        ".read": true
      }
    }
  }
}

कस्टम-दावा विशेषताएँ और भूमिकाएँ

इन नियमों को लागू करने, सेट करने के लिए कस्टम दावों Firebase प्रमाणीकरण में और फिर अपने नियमों में दावों का लाभ उठाने।

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

याद रखें कि जब भी आपके नियमों में कोई पठन शामिल होता है, तो नीचे दिए गए नियमों की तरह, आपको Cloud Firestore में पढ़ने की कार्रवाई के लिए बिल भेजा जाता है।

service cloud.firestore {
  match /databases/{database}/documents {
    // For attribute-based access control, check for an admin claim
    allow write: if request.auth.token.admin == true;
    allow read: true;

    // Alterntatively, for role-based access, assign specific roles to users
    match /some_collection/{document} {
     allow read: if request.auth.token.reader == "true";
     allow write: if request.auth.token.writer == "true";
   }
  }
}

रीयलटाइम डेटाबेस

{
  "rules": {
    "some_path": {
      "$uid": {
        // Create a custom claim for each role or group
        // you want to leverage
        ".write": "auth.uid != null && auth.token.writer == true",
        ".read": "auth.uid != null && auth.token.reader == true"
      }
    }
  }
}

घन संग्रहण

service firebase.storage {
  // Allow reads if the group ID in your token matches the file metadata's `owner` property
  // Allow writes if the group ID is in the user's custom token
  match /files/{groupId}/{fileName} {
    allow read: if resource.metadata.owner == request.auth.token.groupId;
    allow write: if request.auth.token.groupId == groupId;
  }
}