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

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

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

मेनिफ़ेस्ट में एलान

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

{
  ...
  "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/*" ],
      "use_dynamic_url": true
    }
  ],
  ...
}

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

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

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

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

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

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

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

उदाहरण

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