मेनिफ़ेस्ट - वेब पर उपलब्ध संसाधन

वेब पर ऐक्सेस किए जा सकने वाले संसाधन, एक्सटेंशन में मौजूद ऐसी फ़ाइलें होती हैं जिन्हें वेब पेज या दूसरी साइटों पर जाकर ऐक्सेस किया जा सकता है एक्सटेंशन. एक्सटेंशन आम तौर पर, इस सुविधा का इस्तेमाल ऐसी इमेज या अन्य ऐसेट को दिखाने के लिए करते हैं जिन्हें वेब पेजों में लोड किया जाता है, लेकिन एक्सटेंशन के बंडल में शामिल किसी भी एसेट को वेब को ऐक्सेस करने लायक बनाया जा सकता है.

डिफ़ॉल्ट रूप से, किसी भी संसाधन को वेब पर ऐक्सेस नहीं किया जा सकता. ऐसा इसलिए, क्योंकि इससे नुकसान पहुंचाने वाली वेबसाइट को उपयोगकर्ता के इंस्टॉल किए गए एक्सटेंशन फ़िंगरप्रिंट करने की अनुमति मिलती है या इंस्टॉल किए गए एक्सटेंशन में जोखिम की आशंकाओं (उदाहरण के लिए, XSS गड़बड़ियां) का फ़ायदा उठाना शामिल है. किसी एक्सटेंशन के ऑरिजिन से लोड किए गए पेज या स्क्रिप्ट उस एक्सटेंशन के संसाधनों को ऐक्सेस कर सकता है.

मेनिफ़ेस्ट फ़ाइल

web_accessible_resources मेनिफ़ेस्ट प्रॉपर्टी का इस्तेमाल करके, यह बताएं कि कौनसे संसाधन, सार्वजनिक तौर पर उपलब्ध हैं और कौनसे किस सोर्स से पता चलता है. यह प्रॉपर्टी, ऑब्जेक्ट का ऐसा कलेक्शन है जो संसाधन के ऐक्सेस के नियमों के बारे में बताता है. हर ऑब्जेक्ट कई एक्सटेंशन संसाधनों की सूची बनाता है और कम से कम एक matches या extension_ids कुंजियां, उन ऑरिजिन को दिखाती हैं जो इन संसाधनों को ऐक्सेस कर सकते हैं.

{
  ...
  "web_accessible_resources": [
    {
      "resources": [ "test1.png", "test2.png" ],
      "matches": [ "https://web-accessible-resources-1.glitch.me/*" ]
    }, {
      "resources": [ "test3.png", "test4.png" ],
      "matches": [ "https://web-accessible-resources-2.glitch.me/*" ]
    }
  ],
  ...
}

कलेक्शन में मौजूद हर ऑब्जेक्ट में ये एलिमेंट होते हैं:

"resources"
स्ट्रिंग का कलेक्शन, जिसमें एक्सटेंशन की रूट डायरेक्ट्री से दिए गए संसाधन तक पहुंचने वाला मिलता-जुलता पाथ होता है. वाइल्डकार्ड से मेल खाने वाले मिलान के लिए, संसाधनों में तारे के निशान (*) हो सकते हैं. उदाहरण के लिए, "/images/*" एक्सटेंशन की images/ डायरेक्ट्री में मौजूद सभी चीज़ों को बार-बार दिखाता है, जबकि "*.png" सभी PNG फ़ाइलें दिखाता है.
"matches"
स्ट्रिंग का कलेक्शन, जिसमें हर एक मैच पैटर्न होता है. इससे पता चलता है कि कौनसी साइटें इन संसाधनों को ऐक्सेस कर सकती हैं. यूआरएल से मिलान करने के लिए, सिर्फ़ ऑरिजिन का इस्तेमाल किया जाता है. ऑरिजिन में सबडोमेन मैचिंग शामिल है. Google Chrome से "अमान्य मैच पैटर्न" दिखता है अगर पैटर्न में '/*' के अलावा कोई दूसरा पाथ है, तो गड़बड़ी हुई.
"extension_ids"
स्ट्रिंग का कलेक्शन, जिसमें हर एक्सटेंशन का आईडी होता है, जो इन संसाधनों को ऐक्सेस कर सकता है.

हर एलिमेंट में "resources" एलिमेंट के साथ-साथ "matches" या "extension_ids" एलिमेंट शामिल होना चाहिए. इससे एक मैपिंग बनती है, जो बताए गए रिसॉर्स को, पैटर्न से मेल खाने वाले वेब पेजों या मेल खाने वाले आईडी वाले एक्सटेंशन पर दिखाती है.

संसाधन, यूआरएल का इस्तेमाल करने वाले वेब पेज में उपलब्ध हैं chrome-extension://[PACKAGE ID]/[PATH], जिसे runtime.getURL() की मदद से जनरेट किया जा सकता है तरीका. संसाधनों को सही CORS हेडर के साथ दिखाया जाता है, ताकि वे fetch() का इस्तेमाल करके.

वेब ऑरिजिन से एक्सटेंशन रिसॉर्स पर तब तक नेविगेट करने की अनुमति नहीं होती, जब तक कि रिसॉर्स को को वेब ऐक्सेस करने योग्य के रूप में सूचीबद्ध किया जाना चाहिए. इन कोने केस को ध्यान में रखें:

  • जब कोई एक्सटेंशन किसी सार्वजनिक यूआरएल को रीडायरेक्ट करने के लिए, webRequest API का इस्तेमाल करता है किसी ऐसे संसाधन के लिए किया जाने वाला संसाधन अनुरोध जो वेब पर ऐक्सेस नहीं है, उस तरह के अनुरोध को भी ब्लॉक कर दिया जाता है.
  • सार्वजनिक संसाधनों से रीडायरेक्ट करने पर रोक लगा दी जाती है. भले ही, जो संसाधन वेब ऐक्सेस नहीं किया जा सकता, उसका मालिकाना हक रीडायरेक्ट करने वाले व्यक्ति के पास हो एक्सटेंशन चुनें.
  • नेविगेशन गुप्त मोड में तब तक ब्लॉक रहता है, जब तक "incognito" फ़ील्ड की वैल्यू "split" पर सेट न की गई हो.

कॉन्टेंट स्क्रिप्ट को अनुमति की ज़रूरत नहीं होती.

उदाहरण

वेब से ऐक्सेस किए जा सकने वाले संसाधनों के उदाहरण से, यह पता चलता है कि किसी एक्सटेंशन में, इस एलिमेंट का इस्तेमाल कैसे किया जा रहा है.