सामग्री फ़िल्टरिंग

Chrome एक्सटेंशन में, कॉन्टेंट और नेटवर्क फ़िल्टर करने के अलग-अलग तरीके हैं. इस गाइड में, एक्सटेंशन के लिए उपलब्ध कॉन्टेंट फ़िल्टर करने की सुविधाओं के बारे में बताया गया है. साथ ही, इसमें फ़िल्टर करने के अलग-अलग तरीकों, तकनीकों, और एपीआई के बारे में भी बताया गया है जिनका इस्तेमाल Chrome एक्सटेंशन कर सकते हैं.

नेटवर्क के अनुरोध फ़िल्टर करना

Chrome एक्सटेंशन में, नेटवर्क के अनुरोध फ़िल्टर करने का मुख्य तरीका, chrome.declarativeNetRequest एपीआई का इस्तेमाल करना है. Declarative Net Request की मदद से, डेवलपर एलान करने वाले नियमों के बारे में बताकर, नेटवर्क के अनुरोधों को ब्लॉक या उनमें बदलाव कर सकते हैं. Declarative Net Request के नियम का फ़ॉर्मैट, ज़्यादातर विज्ञापन ब्लॉक करने वाले सॉफ़्टवेयर में इस्तेमाल होने वाली फ़िल्टर सूची के सिंटैक्स की सुविधाओं पर आधारित होता है.

इन नियमों से ये काम किए जा सकते हैं:

  • नेटवर्क के किसी अनुरोध को ब्लॉक करना.
  • यूआरएल स्कीम को सुरक्षित स्कीम (http से https या ws से wss) में अपग्रेड करना.
  • नेटवर्क के किसी अनुरोध को रीडायरेक्ट करना.
  • अनुरोध या जवाब के हेडर में बदलाव करना.

Chrome, किसी एक्सटेंशन के साथ बंडल किए गए नियमों और डाइनैमिक तरीके से अपडेट किए गए नियमों (जैसे, रिमोट कॉन्फ़िगरेशन या उपयोगकर्ता के इनपुट के जवाब में) के साथ काम करता है.

अपने एक्सटेंशन के साथ फ़िल्टर करने के नियम बंडल करना

आपके एक्सटेंशन पैकेज में शामिल नियमों को "स्टैटिक नियम" कहा जाता है. जब कोई एक्सटेंशन इंस्टॉल या अपग्रेड किया जाता है, तब ये नियम इंस्टॉल और अपडेट किए जाते हैं. Chrome, इस बात पर पाबंदी लगाता है कि कोई एक्सटेंशन कितने स्टैटिक नियम तय कर सकता है.

स्टैटिक Declarative Net Request के नियमों के लिए, Chrome के पास 3,00,000 नियमों का एक ग्लोबल शेयर किया गया पूल होता है. इसका इस्तेमाल, इंस्टॉल किए गए एक्सटेंशन का सेट मिलकर कर सकता है. इसके अलावा, हर एक्सटेंशन को 30,000 स्टैटिक नियमों का भत्ता मिलता है. उदाहरण के लिए, अगर किसी उपयोगकर्ता ने कॉन्टेंट फ़िल्टर करने वाला सिर्फ़ एक एक्सटेंशन इंस्टॉल किया है, तो वह एक्सटेंशन, Declarative Net Request के 3,30,000 स्टैटिक नियमों का इस्तेमाल कर सकता है. यह समझने के लिए कि ये कितने नियम हैं, लोकप्रिय EasyList फ़िल्टर सूची का उदाहरण लें. इसका इस्तेमाल ज़्यादातर विज्ञापन ब्लॉक करने वाले सॉफ़्टवेयर करते हैं. इसमें नेटवर्क के करीब 35,000 नियम शामिल हैं.

Declarative Net Request के स्टैटिक नियमों को अलग-अलग नियम सेट में व्यवस्थित किया जा सकता है. कोई एक्सटेंशन, Declarative Net Request के ज़्यादा से ज़्यादा 100 स्टैटिक नियम सेट तय कर सकता है. इनमें से 50 नियम सेट एक बार में चालू किए जा सकते हैं.

रनटाइम के दौरान, फ़िल्टर करने के नियम डाइनैमिक तरीके से जोड़ना

कुछ नियमों को एक्सटेंशन के साथ बंडल नहीं किया जा सकता. इसके बजाय, एक्सटेंशन को उन्हें रनटाइम के दौरान जोड़ना होता है. इन नियमों को "डाइनैमिक नियम" कहा जाता है.

Declarative Net Request के डाइनैमिक नियमों के लिए, Chrome हर एक्सटेंशन के लिए ज़्यादा से ज़्यादा 30,000 सुरक्षित डाइनैमिक नियमों की अनुमति देता है. ज़्यादातर नियमों को सुरक्षित नियम माना जाता है. जैसे, block, allow, allowAllRequests या upgradeScheme. अगर किसी नियम को सुरक्षित नहीं माना जाता है (उदाहरण के लिए, redirect), तब भी उन्हें डाइनैमिक तरीके से जोड़ा जा सकता है. हालांकि, इसके लिए ज़्यादा से ज़्यादा 5,000 नियमों की सीमा तय की गई है. यह सीमा, 30,000 डाइनैमिक नियमों की सीमा में भी गिनी जाती है. इसे समझने के लिए, easylist फ़िल्टर सूची में 98 से 99% नियम सुरक्षित नियम होते हैं.

कॉन्टेंट फ़िल्टर करने वाले एक्सटेंशन, अपने एक्सटेंशन के साथ फ़िल्टर करने के जाने-माने नियमों को बंडल करने के लिए, स्टैटिक और डाइनैमिक नियमों का इस्तेमाल कर सकते हैं. साथ ही, ज़रूरत पड़ने पर अपने सर्वर से, कॉन्टेंट फ़िल्टर करने के नए नियमों के साथ अपने एक्सटेंशन को अपडेट कर सकते हैं.

देखे गए अनुरोधों के आधार पर नियम अडजस्ट करना

विज्ञापन का इकोसिस्टम लगातार बदल रहा है. इसलिए, कॉन्टेंट फ़िल्टर को भी अपडेट करना ज़रूरी है. chrome.webRequest और Declarative Net Request के डाइनैमिक नियमों को मिलाकर, निजता के संभावित उल्लंघन के लिए नेटवर्क के अनुरोधों का विश्लेषण किया जा सकता है. साथ ही, आने वाले समय में इन्हें ब्लॉक किया जा सकता है.

इसके लिए, यह तरीका अपनाया जाता है:

  1. chrome.webRequest एपीआई का इस्तेमाल करके, वेब के अनुरोधों का विश्लेषण करें. साथ ही, मशीन लर्निंग का इस्तेमाल करके, उन अनुरोधों की अपने-आप पहचान करने की कोशिश करें जो आपकी निजता से जुड़ी ज़रूरी शर्तों को पूरा नहीं करते हैं.
  2. दूसरे चरण में पहचाने गए हर अनुरोध के लिए, Declarative Net Request का एक डाइनैमिक नियम बनाएं, ताकि आने वाले समय में इसी तरह के अनुरोधों को ब्लॉक किया जा सके.
  3. (ज़रूरी नहीं) पहचाने गए Declarative Net Request के नियम को अपने सर्वर पर वापस भेजें, ताकि इसे आपके अगले एक्सटेंशन अपडेट के साथ, Declarative Net Request के स्टैटिक नियम के तौर पर जोड़ा जा सके.

इस तरीके का फ़ायदा यह है कि विश्लेषण एसिंक्रोनस तरीके से होता है. इससे वेबसाइट की परफ़ॉर्मेंस पर कोई बुरा असर नहीं पड़ता.

उपयोगकर्ताओं को फ़िल्टर करने के अपने नियम तय करने की अनुमति देना

अपने एक्सटेंशन में, फ़िल्टर कॉन्फ़िगरेशन यूज़र इंटरफ़ेस (यूआई) उपलब्ध कराकर, उपयोगकर्ताओं को कॉन्टेंट फ़िल्टर करने के अपने नियम तय करने की अनुमति दी जा सकती है. उपयोगकर्ताओं के तय किए गए इन नियमों को, Declarative Net Request के नियमों में बदलें और उन्हें डाइनैमिक नियमों के तौर पर जोड़ें. ये नियम, उपयोगकर्ताओं के लिए उपलब्ध रहेंगे, क्योंकि ये ब्राउज़र सेशन और एक्सटेंशन अपग्रेड के दौरान बने रहते हैं. इस तरीके का इस्तेमाल करके, उपयोगकर्ता ज़्यादा से ज़्यादा 30,000 कस्टम नियम जोड़ सकते हैं.

वेब पेजों पर मौजूद एलिमेंट फ़िल्टर करना

नेटवर्क के अनुरोधों को फ़िल्टर करना, कॉन्टेंट फ़िल्टर करने का सिर्फ़ एक अहम हिस्सा है. इसका दूसरा अहम हिस्सा, वेब पेजों से सीधे तौर पर अनचाहे कॉन्टेंट को हटाना है. उदाहरण के लिए, easylist फ़िल्टर सूची के 40% से ज़्यादा नियम यह तय करते हैं कि क्लाइंट को पेज के एलिमेंट कैसे छिपाने चाहिए.

यह काम, कॉन्टेंट स्क्रिप्ट का इस्तेमाल करके किया जा सकता है. कॉन्टेंट स्क्रिप्ट, वेब पेजों के कॉन्टेक्स्ट में चलती हैं और DOM का इस्तेमाल करके उनमें बदलाव कर सकती हैं.

Chrome एक्सटेंशन को, रिमोट तरीके से होस्ट किए गए कोड को चलाने की अनुमति नहीं है. हालांकि, सर्वर से मिलने वाले उस डेटा पर कोई असर नहीं पड़ता जिसमें यह बताया जाता है कि किन एलिमेंट को छिपाना है. ऐसा इसलिए, क्योंकि इसे कॉन्फ़िगरेशन डेटा माना जाता है. इसलिए, एलिमेंट के नियमों को ज़रूरत पड़ने पर, रनटाइम के दौरान अपडेट किया जा सकता है.

नीति के तहत इंस्टॉल किए गए एक्सटेंशन में, नेटवर्क के अनुरोध फ़िल्टर करना

Enterprise और शिक्षा के इस्तेमाल के उदाहरणों में, कॉन्टेंट और नेटवर्क फ़िल्टर करने के लिए अक्सर बहुत सख्त ज़रूरतें होती हैं. जैसे, कॉन्टेंट के आधार पर अनुरोधों को फ़िल्टर करना. इन इस्तेमाल के उदाहरणों को चालू करने के लिए, नीति के तहत इंस्टॉल किए गए एक्सटेंशन के पास, नेटवर्क के अनुरोधों को फ़िल्टर और ब्लॉक करने का एक और तरीका होता है. webRequest एपीआई में मौजूद इवेंट के साथ "ब्लॉक करना" विकल्प का इस्तेमाल करके, कॉन्टेंट फ़िल्टर करने का एक ऐसा प्रोग्राम बनाया जा सकता है जो हर अनुरोध पर कस्टम लॉजिक को लागू करता है. इससे यह तय किया जा सकता है कि किसी अनुरोध को ब्लॉक किया जाना चाहिए या नहीं. यह सुविधा, नीति के तहत इंस्टॉल किए गए एक्सटेंशन के लिए ही उपलब्ध है, क्योंकि इन पर ज़्यादा भरोसा किया जाता है.

नेविगेशन के अनुरोधों को रोकना

Declarative Net Request के नियमों का इस्तेमाल करके, नेविगेशन के अनुरोधों को फ़िल्टर किया जा सकता है. उदाहरण के लिए, हो सकता है कि आपको ट्रैकिंग यूआरएल को बायपास करना हो. ये यूआरएल, उपयोगकर्ता को उसके चुने हुए डेस्टिनेशन पर रीडायरेक्ट करते हैं. इसे मैनेज करने का एक तरीका यह है कि नेविगेशन के अनुरोध https://tracker.com?redirect=https%3A%2F%2Fexample.com को किसी एक्सटेंशन पेज पर रीडायरेक्ट किया जाए. इसे वेब पर ऐक्सेस किए जा सकने वाले संसाधन के तौर पर कॉन्फ़िगर करना होगा. इसके बाद, यह रीडायरेक्ट टारगेट को निकालने और लिंक ट्रैकर को बायपास करके, window.location.replace("https://example.com") का इस्तेमाल करके डेस्टिनेशन पर रीडायरेक्ट करने के लिए एक स्क्रिप्ट चलाएगा.