मेनिफ़ेस्ट V3 में सुरक्षा को बेहतर बनाना
यह तीन सेक्शन में से आखिरी सेक्शन है. इसमें, एक्सटेंशन के सेवा वर्कर का हिस्सा नहीं होने वाले कोड में किए जाने वाले ज़रूरी बदलावों के बारे में बताया गया है. इसमें, एक्सटेंशन की सुरक्षा को बेहतर बनाने के लिए ज़रूरी बदलावों के बारे में बताया गया है. इसके अलावा, अन्य दो सेक्शन में, मेनिफ़ेस्ट V3 में अपग्रेड करने और ब्लॉक करने वाले वेब अनुरोधों को बदलने के लिए ज़रूरी अपना कोड अपडेट करना शामिल है.
आर्बिट्रेरी स्ट्रिंग का एक्ज़ीक्यूशन हटाएं
अब executeScript()
, eval()
, और new Function()
का इस्तेमाल करके, बाहरी लॉजिक इस्तेमाल नहीं किया जा सकता.
- सभी बाहरी कोड (JS, Wasm, CSS) को अपने एक्सटेंशन बंडल में ले जाएं.
- एक्सटेंशन बंडल से संसाधन लोड करने के लिए, स्क्रिप्ट और स्टाइल रेफ़रंस अपडेट करें.
- रनटाइम के दौरान संसाधन के यूआरएल बनाने के लिए,
chrome.runtime.getURL()
का इस्तेमाल करें. - सैंडबॉक्स किए गए iframe का इस्तेमाल करें: सैंडबॉक्स किए गए iframe में,
eval
औरnew Function(...)
अब भी काम करते हैं. ज़्यादा जानकारी के लिए, सैंडबॉक्स किए गए iframe के बारे में गाइड पढ़ें.
executeScript()
तरीका अब tabs
नेमस्पेस के बजाय, scripting
नेमस्पेस में मौजूद है. कॉल अपडेट करने के बारे में जानने के लिए, executeScript()
को एक से दूसरी जगह ले जाना लेख पढ़ें.
कुछ खास मामलों में, अब भी अपनी पसंद की स्ट्रिंग को चलाया जा सकता है:
- InsertCSS का इस्तेमाल करके, रिमोट तरीके से होस्ट की गई स्टाइलशीट को किसी वेब पेज में इंजेक्ट करना
chrome.devtools
का इस्तेमाल करने वाले एक्सटेंशन के लिए: inspectWindow.eval की मदद से, जांच किए गए पेज के कॉन्टेक्स्ट में JavaScript को लागू किया जा सकता है.- डीबगर एक्सटेंशन, chrome.debugger.sendCommand का इस्तेमाल करके डीबग टारगेट में JavaScript लागू कर सकते हैं.
रिमोट तौर पर होस्ट किया गया कोड हटाना
मेनिफ़ेस्ट V3 में, आपके एक्सटेंशन का पूरा लॉजिक, एक्सटेंशन पैकेज का हिस्सा होना चाहिए. Chrome वेब स्टोर की नीति के मुताबिक, अब रिमोट तौर पर होस्ट की गई फ़ाइलों को लोड और चलाया नहीं जा सकता. उदाहरण के लिए:
- डेवलपर के सर्वर से ली गई JavaScript फ़ाइलें.
- CDN पर होस्ट की गई कोई भी लाइब्रेरी.
- तीसरे पक्ष की ऐसी लाइब्रेरी जो रिमोट होस्ट किए गए कोड को डाइनैमिक तौर पर फ़ेच करती हैं.
इस्तेमाल के उदाहरण और रिमोट होस्टिंग की वजह के आधार पर, अन्य तरीके उपलब्ध हैं. इस सेक्शन में, समस्या को हल करने के तरीकों के बारे में बताया गया है. अगर आपको रिमोट होस्ट किए गए कोड से जुड़ी समस्याएं आ रही हैं, तो हमारे पास सलाह उपलब्ध है.
कॉन्फ़िगरेशन पर आधारित सुविधाएं और लॉजिक
आपका एक्सटेंशन, रनटाइम के दौरान किसी रिमोट कॉन्फ़िगरेशन (जैसे, JSON फ़ाइल) को लोड और कैश मेमोरी में सेव करता है. कैश मेमोरी में सेव किए गए कॉन्फ़िगरेशन से तय होता है कि कौनसी सुविधाएं चालू हैं.
रिमोट सेवा के साथ बाहरी लॉजिक
आपका एक्सटेंशन, किसी रिमोट वेब सेवा को कॉल करता है. यह आपको कोड को निजी बनाए रखने और उसे ज़रूरत के हिसाब से बदलने देता है. इससे Chrome वेब स्टोर में फिर से सबमिट करने के अतिरिक्त खर्च से बचा जा सकता है.
किसी सैंडबॉक्स किए गए iframe में, रिमोट तरीके से होस्ट किया गया कोड जोड़ें
रिमोट तरीके से होस्ट किया गया कोड, सैंडबॉक्स किए गए iframe में काम करता है. कृपया ध्यान दें कि अगर कोड को एम्बेड किए गए पेज के डीओएम का ऐक्सेस चाहिए, तो यह तरीका काम नहीं करता.
तीसरे पक्ष की लाइब्रेरी का बंडल बनाएं
अगर React या बूटस्ट्रैप जैसे किसी लोकप्रिय फ़्रेमवर्क का इस्तेमाल किया जा रहा है, जिसे पहले किसी बाहरी सर्वर से लोड किया जा रहा था, तो छोटी की गई फ़ाइलों को डाउनलोड किया जा सकता है. साथ ही, उन्हें अपने प्रोजेक्ट में जोड़ा जा सकता है और स्थानीय तौर पर इंपोर्ट किया जा सकता है. उदाहरण के लिए:
<script src="./react-dom.production.min.js"></script>
<link href="./bootstrap.min.css" rel="stylesheet">
किसी लाइब्रेरी को सेवा वर्कर में शामिल करने के लिए, मेनिफ़ेस्ट में "background.type"
बटन को "module"
पर सेट करें और import
स्टेटमेंट का इस्तेमाल करें.
टैब में इंजेक्ट की गई स्क्रिप्ट में बाहरी लाइब्रेरी का इस्तेमाल करना
scripting.executeScript()
को कॉल करते समय, बाहरी लाइब्रेरी को files
कलेक्शन में जोड़कर, रनटाइम के दौरान भी लोड की जा सकती हैं. हालांकि, रनटाइम के दौरान रिमोट तरीके से भी डेटा लोड किया जा सकता है.
chrome.scripting.executeScript({
target: {tabId: tab.id},
files: ['jquery-min.js', 'content-script.js']
});
फ़ंक्शन इंजेक्ट करना
अगर आपको ज़्यादा डाइनैमिक चाहिए, तो scripting.executeScript()
की नई func
प्रॉपर्टी का इस्तेमाल करके, कॉन्टेंट स्क्रिप्ट के तौर पर फ़ंक्शन इंजेक्ट किया जा सकता है और args
प्रॉपर्टी का इस्तेमाल करके वैरिएबल पास किए जा सकते हैं.
let name = 'World!'; chrome.tabs.executeScript({ code: `alert('Hello, ${name}!')` });
बैकग्राउंड स्क्रिप्ट फ़ाइल में.
async function getCurrentTab() {/* ... */} let tab = await getCurrentTab(); function showAlert(givenName) { alert(`Hello, ${givenName}`); } let name = 'World'; chrome.scripting.executeScript({ target: {tabId: tab.id}, func: showAlert, args: [name], });
बैकग्राउंड में काम करने वाले वर्कर.
Chrome एक्सटेंशन सैंपल रेपो में, फ़ंक्शन इंजेक्शन का एक उदाहरण शामिल होता है. इस उदाहरण को समझने में आसानी होती है. getCurrentTab()
का उदाहरण, उस फ़ंक्शन के रेफ़रंस में दिया गया है.
समस्या को हल करने के अन्य तरीके ढूंढना
अगर ऊपर बताए गए तरीके से, आपके इस्तेमाल के उदाहरण में मदद नहीं मिलती है, तो आपको कोई दूसरा समाधान ढूंढना पड़ सकता है. जैसे, किसी दूसरी लाइब्रेरी पर माइग्रेट करना या लाइब्रेरी की सुविधाओं का इस्तेमाल करने के अन्य तरीके ढूंढना. उदाहरण के लिए, Google Analytics के मामले में, हमारी Google Analytics 4 गाइड में बताया गया तरीका अपनाकर, रिमोट तरीके से होस्ट किए गए आधिकारिक JavaScript वर्शन का इस्तेमाल करने के बजाय, Google मेज़रमेंट प्रोटोकॉल पर स्विच किया जा सकता है.
कॉन्टेंट की सुरक्षा से जुड़ी नीति अपडेट करना
"content_security_policy"
को manifest.json
फ़ाइल से नहीं हटाया गया है, लेकिन अब यह एक डिक्शनरी है, जो दो प्रॉपर्टी के साथ काम करती है: "extension_pages"
और "sandbox"
.
{ ... "content_security_policy": "default-src 'self'" ... }
{ ... "content_security_policy": { "extension_pages": "default-src 'self'", "sandbox": "..." } ... }
extension_pages
: यह आपके एक्सटेंशन में मौजूद कॉन्टेक्स्ट के बारे में बताता है. इनमें एचटीएमएल फ़ाइलें और सेवा वर्कर शामिल हैं.
sandbox
: इससे उन सैंडबॉक्स किए गए एक्सटेंशन पेजों का पता चलता है जिनका इस्तेमाल आपका एक्सटेंशन करता है.
कॉन्टेंट की सुरक्षा से जुड़ी ऐसी नीतियां हटाना जो काम नहीं करतीं
मेनिफ़ेस्ट V3, "extension_pages"
फ़ील्ड में कॉन्टेंट की सुरक्षा के लिए बनी नीति की कुछ ऐसी वैल्यू को अनुमति नहीं देता जिन्हें मेनिफ़ेस्ट V2 में अनुमति दी गई थी. खास तौर पर, मेनिफ़ेस्ट V3 उन ऐप्लिकेशन को अनुमति नहीं देता जो रिमोट कोड को चलाने की अनुमति देते हैं. script-src,
object-src
और worker-src
निर्देशों में सिर्फ़ ये वैल्यू हो सकती हैं:
self
none
wasm-unsafe-eval
- सिर्फ़ पैक नहीं किए गए एक्सटेंशन: कोई भी localhost सोर्स (
http://localhost
,http://127.0.0.1
या उन डोमेन का कोई भी पोर्ट)
sandbox
के लिए, कॉन्टेंट की सुरक्षा से जुड़ी नीति की वैल्यू में ऐसी कोई नई पाबंदी नहीं है.