फ़ाइलों को सुरक्षित रखने का तरीका जानें

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 को इंटिग्रेट करते हैं उपयोगकर्ता की सुरक्षा सेक्शन.