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

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

डिफ़ॉल्ट रूप से, किसी भी संसाधन को वेब पर ऐक्सेस नहीं किया जा सकता. ऐसा इसलिए, क्योंकि नुकसान पहुंचाने वाली वेबसाइट को किसी उपयोगकर्ता ने इंस्टॉल किए गए एक्सटेंशन फ़िंगरप्रिंट प्रिंट करने की अनुमति मिलती है. इससे, इंस्टॉल किए गए एक्सटेंशन में जोखिम की आशंकाओं (उदाहरण के लिए, 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() तरीके से जनरेट किया जा सकता है. संसाधनों को सही सीओआरएस हेडर के साथ दिखाया जाता है, ताकि वे fetch() का इस्तेमाल करके उपलब्ध हों.

वेब ऑरिजिन से एक्सटेंशन रिसॉर्स पर जाने वाले नेविगेशन को तब तक ब्लॉक किया जाता है, जब तक कि संसाधन को 'वेब से ऐक्सेस किया जा सकने वाला' के तौर पर लिस्ट न किया गया हो. इन कॉर्नर केस पर ध्यान दें:

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

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

उदाहरण

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