Chrome एक्सटेंशन में कॉन्टेंट और नेटवर्क फ़िल्टर करने के अलग-अलग तरीके हैं. इस गाइड में, एक्सटेंशन के लिए उपलब्ध कॉन्टेंट फ़िल्टर करने की सुविधाओं के बारे में खास जानकारी दी गई है. साथ ही, इसमें फ़िल्टर करने के अलग-अलग तरीकों, तकनीकों, और एपीआई के बारे में बताया गया है जिनका इस्तेमाल Chrome एक्सटेंशन कर सकते हैं.
नेटवर्क अनुरोधों को फ़िल्टर करना
Chrome एक्सटेंशन में नेटवर्क अनुरोधों को फ़िल्टर करने का मुख्य तरीका, browser.declarativeNetRequest एपीआई का इस्तेमाल करना है. नेटवर्क अनुरोध को मैनेज करने के लिए, निर्देश के बजाय सुझाव देने की अनुमति का इस्तेमाल करके डेवलपर, नेटवर्क अनुरोधों को ब्लॉक कर सकते हैं या उनमें बदलाव कर सकते हैं. इसके लिए, उन्हें निर्देश वाले नियम तय करने होते हैं. डिक्लेरेटिव नेट रिक्वेस्ट के नियम का फ़ॉर्मैट, फ़िल्टर लिस्ट के सिंटैक्स की क्षमताओं पर आधारित होता है. इसका इस्तेमाल ज़्यादातर विज्ञापन ब्लॉक करने वाले एक्सटेंशन करते हैं.
इन नियमों से ये काम किए जा सकते हैं:
- नेटवर्क के अनुरोध को ब्लॉक करें.
- यूआरएल स्कीम को सुरक्षित स्कीम (http से https या ws से wss) में अपग्रेड करें.
- नेटवर्क के अनुरोध को रीडायरेक्ट करना.
- अनुरोध या रिस्पॉन्स हेडर में बदलाव करें.
Chrome, एक्सटेंशन के साथ बंडल किए गए नियमों के साथ-साथ, डाइनैमिक तरीके से अपडेट किए गए नियमों का भी इस्तेमाल करता है. जैसे, रिमोट कॉन्फ़िगरेशन या उपयोगकर्ता के इनपुट के जवाब में.
एक्सटेंशन के साथ फ़िल्टर के नियमों को बंडल करना
आपके एक्सटेंशन पैकेज में शामिल नियमों को "स्टैटिक नियम" कहा जाता है. एक्सटेंशन इंस्टॉल या अपग्रेड करने पर, ये नियम इंस्टॉल और अपडेट किए जाते हैं. Chrome, एक्सटेंशन के लिए स्टैटिक नियमों की संख्या को सीमित करता है.
स्टैटिक डिक्लेरेटिव नेट रिक्वेस्ट के नियमों के लिए, Chrome के पास 3,00,000 नियमों का एक ग्लोबल शेयर किया गया पूल होता है. इसका इस्तेमाल, इंस्टॉल किए गए एक्सटेंशन का सेट एक साथ कर सकता है. इसके अलावा, हर एक्सटेंशन को 30,000 स्टैटिक नियमों का भत्ता दिया जाता है. उदाहरण के लिए, अगर किसी उपयोगकर्ता ने सिर्फ़ एक कॉन्टेंट फ़िल्टर करने वाला एक्सटेंशन इंस्टॉल किया है, तो एक्सटेंशन, डिक्लेरेटिव नेट रिक्वेस्ट के 3,30,000 स्टैटिक नियमों का इस्तेमाल कर सकता है. यह जानने के लिए कि यह कितने नियम हैं, विज्ञापन रोकने वाले ज़्यादातर एक्सटेंशन में इस्तेमाल होने वाली लोकप्रिय EasyList फ़िल्टर सूची में करीब 35,000 नेटवर्क नियम शामिल हैं.
स्टैटिक डिक्लेरेटिव नेट रिक्वेस्ट के नियमों को अलग-अलग नियम सेट में व्यवस्थित किया जा सकता है. कोई एक्सटेंशन ज़्यादा से ज़्यादा 100 स्टैटिक नियम सेट कर सकता है. इनमें से 50 नियम सेट एक साथ चालू किए जा सकते हैं.
रनटाइम के दौरान, फ़िल्टर करने के नियमों को डाइनैमिक तरीके से जोड़ना
कुछ नियमों को एक्सटेंशन के साथ बंडल नहीं किया जा सकता. इसके बजाय, एक्सटेंशन को रनटाइम के दौरान उन्हें जोड़ना होगा. इन नियमों को "डाइनैमिक नियम" कहा जाता है.
डाइनैमिक डिक्लेरेटिव नेट रिक्वेस्ट के नियमों के लिए, Chrome हर एक्सटेंशन के लिए ज़्यादा से ज़्यादा 30,000 सुरक्षित डाइनैमिक नियमों की अनुमति देता है. ज़्यादातर नियमों को सुरक्षित नियम माना जाता है: block, allow, allowAllRequests या upgradeScheme. अगर किसी नियम को सुरक्षित नहीं माना जाता है (उदाहरण के लिए, redirect), तो भी उन्हें डाइनैमिक तौर पर जोड़ा जा सकता है. हालांकि, इसके लिए ज़्यादा से ज़्यादा 5,000 की सीमा तय की गई है. यह सीमा, डाइनैमिक नियमों के लिए तय की गई 30,000 की सीमा में भी शामिल है. इस बारे में ज़्यादा जानकारी देने के लिए, EasyList फ़िल्टर सूची में मौजूद 98 से 99% नियम सुरक्षित हैं.
कॉन्टेंट फ़िल्टर करने वाले एक्सटेंशन, स्टैटिक और डाइनैमिक नियमों का इस्तेमाल कर सकते हैं. इससे वे फ़िल्टर करने के लिए जाने-पहचाने नियमों को अपने एक्सटेंशन के साथ बंडल कर सकते हैं. साथ ही, जब भी ज़रूरत हो, अपने सर्वर से कॉन्टेंट फ़िल्टर करने के नए नियमों के साथ अपने एक्सटेंशन को अपडेट कर सकते हैं.
अनुरोधों के आधार पर नियमों में बदलाव करना
विज्ञापन का इकोसिस्टम लगातार बदल रहा है. इसलिए, कॉन्टेंट फ़िल्टर को भी समय-समय पर अपडेट करना ज़रूरी है. browser.webRequest और डाइनैमिक Declarative Net Request नियमों को एक साथ इस्तेमाल करके, निजता के संभावित उल्लंघनों के लिए नेटवर्क अनुरोधों का विश्लेषण किया जा सकता है. साथ ही, आने वाले समय में इन्हें ब्लॉक किया जा सकता है.
बुनियादी तरीका यह है:
browser.webRequestएपीआई का इस्तेमाल करके, वेब अनुरोधों का विश्लेषण करें. साथ ही, ऐसे अनुरोधों की अपने-आप पहचान करने की कोशिश करें जो निजता से जुड़ी आपकी ज़रूरी शर्तों को पूरा नहीं करते. उदाहरण के लिए, मशीन लर्निंग का इस्तेमाल करना.- दूसरे चरण में पहचाने गए हर अनुरोध के लिए, डाइनैमिक Declarative Net Request नियम बनाएं. इससे आने वाले समय में, इसी तरह के अनुरोधों को ब्लॉक किया जा सकेगा.
- (ज़रूरी नहीं) पहचाने गए डिक्लेरेटिव नेट रिक्वेस्ट के नियम को वापस अपने सर्वर पर भेजें, ताकि इसे एक्सटेंशन के अगले अपडेट के साथ स्टैटिक डिक्लेरेटिव नेट रिक्वेस्ट के नियम के तौर पर जोड़ा जा सके.
इस तरीके का फ़ायदा यह है कि विश्लेषण एसिंक्रोनस तरीके से होता है. इससे वेबसाइट की परफ़ॉर्मेंस पर बुरा असर नहीं पड़ता.
उपयोगकर्ताओं को फ़िल्टर करने के नियम तय करने की अनुमति दें
अपने एक्सटेंशन में फ़िल्टर कॉन्फ़िगरेशन यूज़र इंटरफ़ेस (यूआई) उपलब्ध कराकर, उपयोगकर्ताओं को कॉन्टेंट फ़िल्टर करने के अपने नियम तय करने की अनुमति दी जा सकती है. उपयोगकर्ता के तय किए गए इन नियमों को, डिक्लेरेटिव नेट रिक्वेस्ट के नियमों में बदलें और इन्हें डाइनैमिक नियमों के तौर पर जोड़ें. ये नियम उपयोगकर्ताओं के लिए उपलब्ध रहेंगे, क्योंकि ये ब्राउज़र सेशन और एक्सटेंशन अपग्रेड के दौरान बने रहते हैं. इस तरीके का इस्तेमाल करके, उपयोगकर्ता ज़्यादा से ज़्यादा 30,000 कस्टम नियम जोड़ सकते हैं.
वेब पेजों पर मौजूद एलिमेंट फ़िल्टर करना
नेटवर्क अनुरोधों को फ़िल्टर करना, कॉन्टेंट फ़िल्टर करने का सिर्फ़ एक अहम हिस्सा है. इसके अलावा, वेब पेजों से सीधे तौर पर अवांछित कॉन्टेंट को हटाना भी एक अहम हिस्सा है. उदाहरण के लिए, EasyList फ़िल्टर सूची के 40% से ज़्यादा नियमों में यह बताया गया है कि क्लाइंट को पेज के एलिमेंट कैसे छिपाने चाहिए.
इसके लिए, कॉन्टेंट स्क्रिप्ट का इस्तेमाल किया जा सकता है. कॉन्टेंट स्क्रिप्ट, वेब पेजों के कॉन्टेक्स्ट में चलती हैं. साथ ही, DOM का इस्तेमाल करके उनमें बदलाव कर सकती हैं.
Chrome एक्सटेंशन को रिमोट होस्ट किए गए कोड को एक्ज़ीक्यूट करने की अनुमति नहीं है. हालांकि, सर्वर से मिले उस डेटा पर कोई असर नहीं पड़ता जिसमें यह जानकारी होती है कि किन एलिमेंट को छिपाना है. ऐसा इसलिए, क्योंकि इसे कॉन्फ़िगरेशन डेटा माना जाता है. इसलिए, एलिमेंट के नियमों को ज़रूरत के हिसाब से कभी भी अपडेट किया जा सकता है.
नीति के तहत इंस्टॉल किए गए एक्सटेंशन में नेटवर्क अनुरोधों को फ़िल्टर करना
कारोबार और शिक्षा के क्षेत्र में, कॉन्टेंट और नेटवर्क फ़िल्टर करने से जुड़ी बहुत सख्त शर्तें होती हैं. जैसे, कॉन्टेंट के आधार पर अनुरोधों को फ़िल्टर करना. इन इस्तेमाल के उदाहरणों को चालू करने के लिए, नीति के तहत इंस्टॉल किए गए एक्सटेंशन के पास नेटवर्क अनुरोधों को फ़िल्टर और ब्लॉक करने का एक और तरीका होता है. webRequest API में इवेंट के साथ "ब्लॉक करना" विकल्प का इस्तेमाल करके, प्रोग्राम के हिसाब से कॉन्टेंट फ़िल्टर करने की सुविधा लागू की जा सकती है. यह सुविधा, हर अनुरोध पर कस्टम लॉजिक लागू करती है, ताकि यह तय किया जा सके कि किसी अनुरोध को ब्लॉक किया जाना चाहिए या नहीं. यह सुविधा सिर्फ़ नीति के तहत इंस्टॉल किए गए एक्सटेंशन के लिए उपलब्ध है, क्योंकि इन पर ज़्यादा भरोसा किया जाता है.
नेविगेशन के अनुरोधों को इंटरसेप्ट करना
नेटवर्क अनुरोध को मैनेज करने के लिए, निर्देश के बजाय सुझाव देने की अनुमति से जुड़े नियमों का इस्तेमाल करके, नेविगेशन के अनुरोधों को फ़िल्टर किया जा सकता है. उदाहरण के लिए, आपको उन ट्रैकिंग यूआरएल को बायपास करना पड़ सकता है जो उपयोगकर्ता को उसके चुने गए डेस्टिनेशन पर रीडायरेक्ट करते हैं. इसे मैनेज करने का एक तरीका यह है कि नेविगेशन के अनुरोध https://tracker.com?redirect=https%3A%2F%2Fexample.com को एक्सटेंशन पेज पर रीडायरेक्ट किया जाए. इस पेज को वेब ऐक्सेस की जा सकने वाली संसाधन के तौर पर कॉन्फ़िगर करना होगा. इसके बाद, यह पेज एक स्क्रिप्ट चलाएगा, ताकि रीडायरेक्ट टारगेट को निकाला जा सके और लिंक ट्रैकर को बाईपास करके, window.location.replace("https://example.com") का इस्तेमाल करके डेस्टिनेशन पर रीडायरेक्ट किया जा सके.