Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

फायरबेस क्लाउड स्टोरेज सुरक्षा नियमों में शर्तों का उपयोग करें

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

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

  • उपयोगकर्ता प्रमाणीकरण की जाँच करें
  • आने वाले डेटा को मान्य करें

प्रमाणीकरण

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

जब एक क्लाउड संग्रहण के खिलाफ एक अनुरोध को प्रमाणीकृत उपयोगकर्ता प्रदर्शन, request.auth चर उपयोगकर्ता के साथ से भर जाता है uid ( request.auth.uid ) अच्छी तरह से Firebase प्रमाणीकरण जेडब्ल्यूटी (के दावों के रूप में के रूप में request.auth.token )।

इसके अतिरिक्त, जब कस्टम प्रमाणीकरण का उपयोग, अतिरिक्त दावों में सामने कर रहे हैं request.auth.token क्षेत्र।

एक अप्रमाणित उपयोगकर्ता एक अनुरोध करता है, request.auth चर रहा है null

इस डेटा का उपयोग करके, फ़ाइलों को सुरक्षित करने के लिए प्रमाणीकरण का उपयोग करने के कई सामान्य तरीके हैं:

  • सार्वजनिक: उपेक्षा request.auth
  • निजी प्रमाणीकृत: जाँच लें कि request.auth नहीं है null
  • उपयोगकर्ता निजी: जाँच लें कि request.auth.uid एक पथ के बराबर होती है uid
  • समूह निजी: चुने हुए दावे से मेल खाने के लिए कस्टम टोकन के दावों की जाँच करें, या मेटाडेटा फ़ील्ड मौजूद है या नहीं यह देखने के लिए फ़ाइल मेटाडेटा पढ़ें

सह लोक

किसी भी नियम है कि विचार नहीं करता request.auth संदर्भ एक माना जा सकता है public , नियम के बाद से यह उपयोगकर्ता के प्रमाणीकरण संदर्भ पर विचार नहीं करता। ये नियम सार्वजनिक डेटा जैसे गेम एसेट, ध्वनि फ़ाइलें, या अन्य स्थिर सामग्री को सामने लाने के लिए उपयोगी हो सकते हैं।

// Anyone to read a public image if the file is less than 100kB
// Anyone can upload a public file ending in '.txt'
match /public/{imageId} {
  allow read: if resource.size < 100 * 1024;
  allow write: if imageId.matches(".*\\.txt");
}

प्रमाणित निजी

कुछ मामलों में, आप चाहते हैं कि डेटा आपके एप्लिकेशन के सभी प्रमाणित उपयोगकर्ताओं द्वारा देखा जा सके, लेकिन अनधिकृत उपयोगकर्ताओं द्वारा नहीं। चूंकि request.auth चर रहा है null सभी अप्रमाणित उपयोगकर्ताओं के लिए, तुम सब करने के लिए है की जाँच है request.auth चर आदेश प्रमाणीकरण की आवश्यकता के लिए में मौजूद है:

// Require authentication on all internal image reads
match /internal/{imageId} {
  allow read: if request.auth != null;
}

उपयोगकर्ता निजी

अब तक के लिए सबसे अधिक आम उपयोग request.auth निजी दस्तावेजों को पढ़ने के लिए अपलोड करने के प्रोफ़ाइल चित्र से: उनके फाइलों पर बारीक अनुमति के साथ अलग-अलग उपयोगकर्ताओं को प्रदान किया जाएगा।

चूंकि क्लाउड संग्रहण में फ़ाइलों को फाइल करने के लिए एक पूर्ण "पथ" है, यह सब एक फ़ाइल एक उपयोगकर्ता द्वारा नियंत्रित करने के लिए ले जाता है फ़ाइल नाम उपसर्ग में अद्वितीय, उपयोगकर्ता पहचान की जानकारी का एक टुकड़ा (जैसे उपयोगकर्ता का रूप है uid ) है कि जाँच की जा सकती जब नियम का मूल्यांकन किया जाता है:

// Only a user can upload their profile picture, but anyone can view it
match /users/{userId}/profilePicture.png {
  allow read;
  allow write: if request.auth.uid == userId;
}

समूह निजी

एक और समान रूप से सामान्य उपयोग का मामला किसी वस्तु पर समूह अनुमतियों की अनुमति देना होगा, जैसे कि कई टीम सदस्यों को एक साझा दस्तावेज़ पर सहयोग करने की अनुमति देना। ऐसा करने के कई तरीके हैं:

  • टकसाल एक Firebase प्रमाणीकरण कस्टम टोकन (जैसे कि एक समूह आईडी के रूप में) एक समूह के सदस्य के बारे में अतिरिक्त जानकारी शामिल है
  • (इस तरह के एक समूह आईडी या अधिकृत की सूची के रूप में समूह जानकारी शामिल करें uid में रों) फ़ाइल मेटाडाटा

एक बार जब यह डेटा टोकन या फ़ाइल मेटाडेटा में संग्रहीत हो जाता है, तो इसे एक नियम के भीतर से संदर्भित किया जा सकता है:

// 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;
}

अनुरोध मूल्यांकन

अपलोड, डाउनलोड, मेटाडाटा परिवर्तन, और हटाए गए का उपयोग कर मूल्यांकन किया जाता है request Cloud Storage पर भेज दिया है। उपयोगकर्ता की अनन्य आईडी और में Firebase प्रमाणीकरण पेलोड के अलावा request.auth वस्तु ऊपर बताया गया है, request चर फ़ाइल पथ जहां अनुरोध किया जा रहा है, वह समय है जब अनुरोध प्राप्त होता है, और नए शामिल resource मूल्य अगर अनुरोध एक लेखन है। HTTP शीर्षलेख और प्रमाणीकरण स्थिति भी शामिल हैं।

request वस्तु भी उपयोगकर्ता के अनन्य आईडी और में Firebase प्रमाणीकरण पेलोड शामिल request.auth वस्तु है, जो आगे समझाया जाएगा उपयोगकर्ता आधारित सुरक्षा डॉक्स की धारा।

में गुण की पूरी सूची request वस्तु नीचे उपलब्ध है:

संपत्ति प्रकार विवरण
auth नक्शा<स्ट्रिंग, स्ट्रिंग> एक उपयोगकर्ता के प्रवेश प्रदान करता है, जब uid , उपयोगकर्ता के अद्वितीय ID, और token , Firebase प्रमाणीकरण जेडब्ल्यूटी दावों का एक नक्शा। अन्यथा, यह हो जाएगा null
params नक्शा<स्ट्रिंग, स्ट्रिंग> अनुरोध के क्वेरी पैरामीटर युक्त नक्शा।
path पथ एक path पथ अनुरोध पर प्रदर्शन किया जा रहा है का प्रतिनिधित्व।
resource नक्शा<स्ट्रिंग, स्ट्रिंग> नए संसाधन मूल्य, पर केवल पेश write अनुरोध।
time TIMESTAMP सर्वर समय का प्रतिनिधित्व करने वाला एक टाइमस्टैम्प अनुरोध का मूल्यांकन किया जाता है।

संसाधन मूल्यांकन

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

क्लाउड संग्रहण के लिए Firebase सुरक्षा नियमों में फ़ाइल मेटाडेटा प्रदान resource वस्तु है, जो मेटाडाटा के कुंजी / मान जोड़े एक क्लाउड संग्रहण वस्तु में सामने होता है। इन गुणों पर निरीक्षण किया जा सकता है read या write अनुरोध डेटा अखंडता को सुनिश्चित करने।

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

में गुण की पूरी सूची resource वस्तु नीचे उपलब्ध है:

संपत्ति प्रकार विवरण
name डोरी वस्तु का पूरा नाम
bucket डोरी उस बाल्टी का नाम जिसमें यह वस्तु रहती है।
generation NS Google क्लाउड संग्रहण वस्तु पीढ़ी इस वस्तु की।
metageneration NS Google क्लाउड संग्रहण वस्तु metageneration इस वस्तु की।
size NS वस्तु का आकार बाइट्स में।
timeCreated TIMESTAMP एक टाइमस्टैम्प उस समय का प्रतिनिधित्व करता है जब कोई वस्तु बनाई गई थी।
updated TIMESTAMP एक टाइमस्टैम्प उस समय का प्रतिनिधित्व करता है जब किसी ऑब्जेक्ट को अंतिम बार अपडेट किया गया था।
md5Hash डोरी वस्तु का MD5 हैश।
crc32c डोरी वस्तु का एक crc32c हैश।
etag डोरी इस वस्तु से जुड़ा ईटैग।
contentDisposition डोरी इस वस्तु से संबद्ध सामग्री स्वभाव।
contentEncoding डोरी इस ऑब्जेक्ट से संबद्ध सामग्री एन्कोडिंग।
contentLanguage डोरी इस वस्तु से जुड़ी सामग्री भाषा।
contentType डोरी इस ऑब्जेक्ट से संबद्ध सामग्री प्रकार।
metadata नक्शा<स्ट्रिंग, स्ट्रिंग> अतिरिक्त, डेवलपर द्वारा निर्दिष्ट कस्टम मेटाडेटा के कुंजी/मान जोड़े।

request.resource के अपवाद के साथ इन सभी का होता है generation , metageneration , etag , timeCreated , और updated

डेटा मान्य करें

क्लाउड संग्रहण के लिए Firebase सुरक्षा नियम भी डेटा सत्यापन के लिए इस्तेमाल किया जा सकता, फ़ाइल नाम और पथ के साथ-साथ के रूप में ऐसी फ़ाइल मेटाडाटा गुण मान्य सहित contentType और size

service firebase.storage {
  match /b/{bucket}/o {
    match /images/{imageId} {
      // Only allow uploads of any image file that's less than 5MB
      allow write: if request.resource.size < 5 * 1024 * 1024
                   && request.resource.contentType.matches('image/.*');
    }
  }
}

कस्टम कार्य

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

  • कार्य केवल एक ही शामिल कर सकते हैं return बयान। उनमें कोई अतिरिक्त तर्क नहीं हो सकता। उदाहरण के लिए, वे लूप निष्पादित नहीं कर सकते हैं या बाहरी सेवाओं को कॉल नहीं कर सकते हैं।
  • फ़ंक्शंस स्वचालित रूप से फ़ंक्शंस और वेरिएबल्स को उस दायरे से एक्सेस कर सकते हैं जिसमें उन्हें परिभाषित किया गया है। उदाहरण के लिए, एक समारोह में परिभाषित service firebase.storage गुंजाइश की पहुंच है resource चर, और बादल के firestore के लिए केवल, बिल्ट-इन कार्य जैसे get() और exists()
  • फ़ंक्शंस अन्य फ़ंक्शंस को कॉल कर सकते हैं लेकिन रिकर्स नहीं कर सकते हैं। कुल कॉल स्टैक गहराई 10 तक सीमित है।
  • संस्करण में rules2 फ़ंक्शन का उपयोग करके वैरिएबल निर्धारित कर सकते let कीवर्ड। फ़ंक्शंस में लेट बाइंडिंग की संख्या हो सकती है, लेकिन रिटर्न स्टेटमेंट के साथ समाप्त होना चाहिए।

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

service firebase.storage {
  match /b/{bucket}/o {
    // True if the user is signed in or the requested data is 'public'
    function signedInOrPublic() {
      return request.auth.uid != null || resource.data.visibility == 'public';
    }
    match /images/{imageId} {
      allow read, write: if signedInOrPublic();
    }
    match /mp3s/{mp3Ids} {
      allow read: if signedInOrPublic();
    }
  }
}

जैसे-जैसे आपके नियमों की जटिलता बढ़ती है, आपके फायरबेस सुरक्षा नियमों में कार्यों का उपयोग करना उन्हें अधिक बनाए रखने योग्य बनाता है।

अगला कदम

शर्तों की इस चर्चा के बाद, आप नियमों की अधिक परिष्कृत समझ प्राप्त कर चुके हैं और इसके लिए तैयार हैं:

मुख्य उपयोग के मामलों को संभालने का तरीका जानें, और नियमों को विकसित करने, परीक्षण करने और लागू करने के लिए कार्यप्रवाह सीखें: