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

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

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

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

ये नियम ये काम कर सकते हैं:

  • नेटवर्क अनुरोध को ब्लॉक करें.
  • यूआरएल स्कीम को किसी सुरक्षित स्कीम (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 में गिना जाएगा. इसे ध्यान में रखते हुए, ईज़ीलिस्ट फ़िल्टर की सूची में मौजूद 98 से 99% नियमों के सुरक्षित नियम हैं.

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

निगरानी किए गए अनुरोधों के आधार पर नियम लागू करें

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

बुनियादी तरीका है:

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

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

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

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

वेब पेजों पर एलिमेंट फ़िल्टर करें

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

कॉन्टेंट स्क्रिप्ट का इस्तेमाल करके ऐसा किया जा सकता है. कॉन्टेंट स्क्रिप्ट, वेब पेजों के हिसाब से चलती हैं. साथ ही, इनमें डीओएम का इस्तेमाल करके बदलाव किए जा सकते हैं.

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

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

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

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

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