Cloud Storage for Firebase, डिक्लेरेटिव पाथ पर आधारित सुरक्षा मॉडल उपलब्ध कराता है इसे Cloud Storage के लिए Firebase Security Rules कहा गया है. इसकी मदद से, अपनी फ़ाइलें सुरक्षित रखें.
नियमों को समझना
Cloud Storage के लिए Firebase Security Rules का इस्तेमाल यह पता लगाने के लिए किया जाता है कि किसने पढ़ा और लिखा है
Cloud Storage में सेव की गई फ़ाइलों का ऐक्सेस और फ़ाइलें
स्ट्रक्चर्ड डेटा दिया गया है और उनमें कौनसा मेटाडेटा शामिल है. नियम का मूल प्रकार allow है
यह नियम, read और write अनुरोध की अनुमति देता है. हालांकि, ऐसा तब ही किया जा सकता है, जब अनुरोध करने का विकल्प चुना गया हो
शर्त की जानकारी दी गई है, उदाहरण के लिए:
// If no condition is specified, the rule evaluates to true allow read; // Rules can optionally specify a condition allow write: if <condition>; // Rules can also specify multiple request methods allow read, write: if <condition>;
मिलते-जुलते पाथ
Cloud Storage Security Rules match में मौजूद फ़ाइलों को ऐक्सेस करने के लिए इस्तेमाल किए गए फ़ाइल पाथ
Cloud Storage. नियमों में सटीक पाथ या वाइल्डकार्ड पाथ match हो सकते हैं और
नियमों को नेस्ट किया जा सकता है. अगर कोई भी मिलान नियम अनुरोध के तरीके की अनुमति नहीं देता है, या
शर्त की वैल्यू false है, तो अनुरोध अस्वीकार कर दिया गया.
पूरी तरह मिलते-जुलते नतीजे
// Exact match for "images/profilePhoto.png" match /images/profilePhoto.png { allow write: if <condition>; } // Exact match for "images/croppedProfilePhoto.png" match /images/croppedProfilePhoto.png { allow write: if <other_condition>; }
नेस्ट किए गए मिलते-जुलते वीडियो
// Partial match for files that start with "images" match /images { // Exact match for "images/profilePhoto.png" match /profilePhoto.png { allow write: if <condition>; } // Exact match for "images/croppedProfilePhoto.png" match /croppedProfilePhoto.png { allow write: if <other_condition>; } }
वाइल्डकार्ड से मेल खाने वाले नतीजे
वाइल्डकार्ड का इस्तेमाल करके, किसी पैटर्न को match करने के लिए भी नियमों का इस्तेमाल किया जा सकता है. वाइल्डकार्ड
नाम वाला वैरिएबल जो सिंगल स्ट्रिंग को दिखाता है, जैसे कि
profilePhoto.png या एक से ज़्यादा पाथ सेगमेंट, जैसे
images/profilePhoto.png.
वाइल्डकार्ड के नाम के चारों ओर कर्ली ब्रैकेट जोड़कर, वाइल्डकार्ड बनाया जाता है, जैसे
{string}. एक से ज़्यादा सेगमेंट वाइल्डकार्ड, =** को
वाइल्डकार्ड नाम, जैसे {path=**}:
// Partial match for files that start with "images" match /images { // Exact match for "images/*" // e.g. images/profilePhoto.png is matched match /{imageId} { // This rule only matches a single path segment (*) // imageId is a string that contains the specific segment matched allow read: if <condition>; } // Exact match for "images/**" // e.g. images/users/user:12345/profilePhoto.png is matched // images/profilePhoto.png is also matched! match /{allImages=**} { // This rule matches one or more path segments (**) // allImages is a path that contains all segments matched allow read: if <other_condition>; } }
अगर एक से ज़्यादा नियम किसी फ़ाइल से मेल खाते हैं, तो सभी के नतीजे का OR होता है
नियमों का आकलन. इसका मतलब है कि अगर फ़ाइल से मेल खाने वाले किसी नियम की वैल्यू true है, तो
नतीजा true है.
ऊपर दिए गए नियमों में, "images/profilePhoto.png" फ़ाइल को पढ़ा जा सकता है, अगर
फ़ाइल होने पर, condition या other_condition 'सही' के तौर पर आकलन करते हैं
"images/users/user:12345/profilePhoto.png" केवल इसके परिणाम के अधीन होता है
other_condition.
वाइल्डकार्ड वैरिएबल का रेफ़रंस, match की सबमिट फ़ाइल में जाकर लिया जा सकता है
नाम या पाथ की अनुमति:
// Another way to restrict the name of a file match /images/{imageId} { allow read: if imageId == "profilePhoto.png"; }
Cloud Storage Security Rules कैस्केड नहीं होता है और नियमों का मूल्यांकन सिर्फ़ तब किया जाता है, जब अनुरोध पथ बताए गए नियमों वाले पथ से मेल खाता है.
मूल्यांकन का अनुरोध करें
अपलोड, डाउनलोड, मेटाडेटा में बदलाव, और मिटाए गए कॉन्टेंट का आकलन करने के लिए,
Cloud Storage को request भेजे गए. request वैरिएबल में
वह फ़ाइल पाथ जहां अनुरोध किया जा रहा है, वह समय जब अनुरोध किया जाता है
मिला है और अगर अनुरोध एक राइट किया गया है, तो resource की नई वैल्यू. एचटीटीपी हेडर
साथ ही, पुष्टि करने की स्थिति भी शामिल होती है.
request ऑब्जेक्ट में उपयोगकर्ता का यूनीक आईडी और
request.auth ऑब्जेक्ट में Firebase Authentication पेलोड, जो
उपयोगकर्ता पर आधारित सुरक्षा सेक्शन में, इस बारे में ज़्यादा जानकारी दी गई है
सेक्शन में जाएं.
request ऑब्जेक्ट में प्रॉपर्टी की पूरी सूची नीचे दी गई है:
| प्रॉपर्टी | टाइप | ब्यौरा |
|---|---|---|
auth |
मैप<string, string> | जब कोई उपयोगकर्ता लॉग इन होता है, तो उपयोगकर्ता का uid, यूनीक आईडी, और
token, Firebase Authentication JWT दावों का मैप. नहीं तो, यह होगा
null. |
params |
मैप<string, string> | अनुरोध के क्वेरी पैरामीटर वाला मैप. |
path |
पाथ | अनुरोध किए जा रहे पाथ को दिखाने वाला path
ने कैसा परफ़ॉर्म किया. |
resource |
मैप<string, string> | नई संसाधन वैल्यू, सिर्फ़ write अनुरोध पर मौजूद है.
|
time |
timestamp | अनुरोध का आकलन करने के लिए सर्वर के समय को दिखाने वाला टाइमस्टैंप. |
संसाधनों का आकलन
नियमों का मूल्यांकन करते समय, हो सकता है कि आप फ़ाइल के मेटाडेटा का मूल्यांकन भी करना चाहें अपलोड, डाउनलोड, संशोधित या हटाया जा रहा है. इसकी मदद से, जटिल और शक्तिशाली नियम जो ऐसे काम करते हैं जैसे कुछ फ़ाइलों को अपलोड किया जाने वाला कॉन्टेंट टाइप या सिर्फ़ एक तय साइज़ से बड़ी फ़ाइलें हटाया गया.
Cloud Storage के लिए Firebase Security Rules, resource में फ़ाइल मेटाडेटा उपलब्ध कराता है
ऑब्जेक्ट है, जिसमें
Cloud Storage ऑब्जेक्ट. इन प्रॉपर्टी की जांच read पर की जा सकती है या
डेटा के रखरखाव को पक्का करने के लिए write अनुरोध.
write के अनुरोधों (जैसे कि अपलोड करना, मेटाडेटा अपडेट करना, और मिटाना) पर
resource ऑब्जेक्ट के अलावा, जिसमें फ़ाइल का फ़ाइल मेटाडेटा भी होता है
जो वर्तमान में अनुरोध पथ पर मौजूद है, तो आपके पास
request.resource ऑब्जेक्ट, जिसमें इस फ़ाइल मेटाडेटा का सबसेट शामिल होता है
लिखा जाएगा. यह पक्का करने के लिए कि डेटा
इंटिग्रिटी की अनुमति दें या ऐप्लिकेशन की पाबंदियां लागू करें. जैसे, फ़ाइल टाइप या साइज़.
resource ऑब्जेक्ट में प्रॉपर्टी की पूरी सूची नीचे दी गई है:
| प्रॉपर्टी | टाइप | ब्यौरा |
|---|---|---|
name |
स्ट्रिंग | ऑब्जेक्ट का पूरा नाम |
bucket |
स्ट्रिंग | उस बकेट का नाम जिसमें यह ऑब्जेक्ट है. |
generation |
int | GCS इस ऑब्जेक्ट की ऑब्जेक्ट जेनरेशन है. |
metageneration |
int | GCS इस ऑब्जेक्ट का ऑब्जेक्ट मेटाजनरेशन है. |
size |
int | ऑब्जेक्ट का साइज़, बाइट में. |
timeCreated |
timestamp | ऑब्जेक्ट बनाए जाने के समय को दिखाने वाला टाइमस्टैंप. |
updated |
timestamp | ऑब्जेक्ट को आखिरी बार अपडेट किए जाने का समय दिखाने वाला टाइमस्टैंप. |
md5Hash |
स्ट्रिंग | ऑब्जेक्ट का MD5 हैश. |
crc32c |
स्ट्रिंग | ऑब्जेक्ट का crc32c हैश. |
etag |
स्ट्रिंग | इस ऑब्जेक्ट से जुड़ा ईटैग. |
contentDisposition |
स्ट्रिंग | इस ऑब्जेक्ट से जुड़ा कॉन्टेंट मैनेजमेंट. |
contentEncoding |
स्ट्रिंग | इस ऑब्जेक्ट के साथ जुड़ी कॉन्टेंट एन्कोडिंग. |
contentLanguage |
स्ट्रिंग | इस ऑब्जेक्ट के कॉन्टेंट की भाषा. |
contentType |
स्ट्रिंग | इस ऑब्जेक्ट से जुड़ा कॉन्टेंट टाइप. |
metadata |
मैप<स्ट्रिंग, स्ट्रिंग> | डेवलपर की ओर से बताए गए कस्टम मेटाडेटा के कुंजी/वैल्यू पेयर. |
request.resource में generation को छोड़कर, ये सभी शामिल हैं,
metageneration, etag, timeCreated, और updated.
पूरा उदाहरण
इन सभी को एक साथ मिलाकर, किसी इमेज के लिए नियमों का पूरा उदाहरण बनाया जा सकता है स्टोरेज की सुविधा:
service firebase.storage { match /b/{bucket}/o { match /images { // Cascade read to any image type at any path match /{allImages=**} { allow read; } // Allow write files to the path "images/*", subject to the constraints: // 1) File is less than 5MB // 2) Content type is an image // 3) Uploaded content type matches existing content type (if it exists) // 4) File name (stored in imageId wildcard variable) is less than 32 characters match /{imageId} { allow write: if request.resource.size < 5 * 1024 * 1024 && request.resource.contentType.matches('image/.*') && (resource == null || request.resource.contentType == resource.contentType) && imageId.size() < 32 } } } }
आइए, अब हर उपयोगकर्ता के हिसाब से फ़ाइल ऐक्सेस करने के लिए Firebase Authentication को इंटिग्रेट करते हैं उपयोगकर्ता की सुरक्षा सेक्शन.