सुरक्षित रहें

एक्सटेंशन को ब्राउज़र में खास सुविधाओं का ऐक्सेस मिलता है. इस वजह से, ये हमलावरों के लिए दिलचस्प टारगेट बन जाते हैं. अगर किसी एक्सटेंशन के साथ छेड़छाड़ की जाती है, तो उस एक्सटेंशन का हर उपयोगकर्ता, नुकसान पहुंचाने वाली और अनचाही मैलवेयर गतिविधि के लिए असुरक्षित हो जाता है. इन तरीकों का इस्तेमाल करके किसी एक्सटेंशन को सुरक्षित रखें और उसके उपयोगकर्ताओं को सुरक्षित रखें.

डेवलपर खातों की सुरक्षा करें

एक्सटेंशन कोड Google खातों के ज़रिए अपलोड और अपडेट किया जाता है. अगर डेवलपर के खातों के साथ छेड़छाड़ की जाती है, तो हमलावर सभी उपयोगकर्ताओं तक नुकसान पहुंचाने वाला कोड सीधे पहुंचा सकता है. इन खातों को सुरक्षित रखने के लिए, दो तरीकों से पुष्टि करने की सुविधा चालू करें. आम तौर पर, इसके लिए सुरक्षा कुंजी का इस्तेमाल किया जाता है.

ग्रुप को चुनने के हिसाब से सेट करें

अगर ग्रुप पब्लिश करने की सुविधा का इस्तेमाल किया जा रहा है, तो ग्रुप को भरोसेमंद डेवलपर तक ही सीमित रखें. अनजान लोगों से सदस्यता के अनुरोध स्वीकार न करें.

एचटीटीपी का इस्तेमाल कभी न करें

डेटा का अनुरोध करते या उसे भेजते समय, एचटीटीपी कनेक्शन से बचें. मान लो कि सभी एचटीटीपी कनेक्शन में कुछ जानकारी मौजूद होगी या उनमें बदलाव होंगे. एचटीटीपीएस को हमेशा प्राथमिकता दी जानी चाहिए, क्योंकि इसमें पहले से मौजूद सुरक्षा सुविधा मौजूद होती है. यह मैन इन द मिडल अटैक को गच्चा देने की कोशिश करती है.

कम से कम अनुमतियों का अनुरोध करें

Chrome ब्राउज़र, किसी एक्सटेंशन के उन खास अधिकारों को ऐक्सेस करता है जिनका अनुरोध मेनिफ़ेस्ट में साफ़ तौर पर किया गया है. एक्सटेंशन को सिर्फ़ उन एपीआई और वेबसाइटों को रजिस्टर करके अपनी अनुमतियां कम करनी चाहिए जिन पर वे निर्भर करते हैं.

किसी एक्सटेंशन के खास अधिकारों को सीमित करने से, संभावित हमलावर का फ़ायदा सीमित हो सकता है.

क्रॉस-ऑरिजिन फ़ेच()

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

{
  "name": "Very Secure Extension",
  "version": "1.0",
  "description": "Example of a Secure Extension",
  "host_permissions": [
    "https://developer.chrome.com/*",
    "https://*.google.com/*"
  ],
  "manifest_version": 3
}

ऊपर दिए गए नमूने में यह एक्सटेंशन "https://developer.chrome.com/*" और "https://*.google.com/*" को अनुमतियों में शामिल करके, developer.chrome.com और Google के सबडोमेन पर मौजूद किसी भी चीज़ को ऐक्सेस करने का अनुरोध करता है. अगर एक्सटेंशन के साथ छेड़छाड़ की गई थी, तो उसके पास अब भी सिर्फ़ उन वेबसाइटों से इंटरैक्ट करने की अनुमति होगी जो मिलते-जुलते पैटर्न से मेल खाती हैं. हमलावर के पास "https://user_bank_info.com" को ऐक्सेस करने या "https://malicious_website.com" से इंटरैक्ट करने की सीमित क्षमता होगी.

मेनिफ़ेस्ट फ़ील्ड को सीमित करें

मेनिफ़ेस्ट में गैर-ज़रूरी कुंजियों और अनुमतियों को शामिल करने से जोखिम की आशंकाएं पैदा होती हैं. साथ ही, एक्सटेंशन ज़्यादा दिखने लगता है. मेनिफ़ेस्ट फ़ील्ड को उन तक ही सीमित करें जिन पर एक्सटेंशन भरोसा करता है.

बाहरी रूप से कनेक्ट करने लायक

"externally_connectable" फ़ील्ड का इस्तेमाल करके यह बताएं कि एक्सटेंशन किन बाहरी एक्सटेंशन और वेब पेजों के साथ जानकारी का लेन-देन करेगा. तय करें कि एक्सटेंशन, भरोसेमंद सोर्स के साथ बाहरी तौर पर किन लोगों को कनेक्ट कर सकता है.

{
  "name": "Super Safe Extension",
  "externally_connectable": {
    "ids": [
      "iamafriendlyextensionhereisdatas"
    ],
    "matches": [
      "https://developer.chrome.com/*",
      "https://*.google.com/*"
    ],
    "accepts_tls_channel_id": false
  },
  ...
}

वेब पर ऐक्सेस करने लायक संसाधन

"web_accessible_resources" के तहत संसाधनों को वेब से ऐक्सेस करने लायक बनाने पर, ऐसा एक्सटेंशन बन जाएगा जिसका पता वेबसाइट और हमलावरों को लगा सकते हैं.

{
  ...
  "web_accessible_resources": [
    {
      "resources": [ "test1.png", "test2.png" ],
      "matches": [ "https://web-accessible-resources-1.glitch.me/*" ]
    }
  ]
  ...
}

जितने ज़्यादा वेब ऐक्सेस करने लायक संसाधन उपलब्ध होंगे, संभावित हमलावर उतने ही ज़्यादा तरीकों का फ़ायदा उठा सकता है. इन फ़ाइलों को कम से कम रखें.

अश्लील कॉन्टेंट की सुरक्षा नीति शामिल करें

क्रॉस-साइट स्क्रिप्टिंग हमलों को रोकने के लिए, मेनिफ़ेस्ट में एक्सटेंशन के लिए कॉन्टेंट की सुरक्षा नीति शामिल करें. अगर एक्सटेंशन सिर्फ़ खुद से संसाधन लोड करता है, तो यह रजिस्टर करें:

{
  "name": "Very Secure Extension",
  "version": "1.0",
  "description": "Example of a Secure Extension",
   "content_security_policy": {
    "extension_pages": "default-src 'self'"
  },
  "manifest_version": 3
}

अगर एक्सटेंशन को वेब असेंबली का इस्तेमाल करने या सैंडबॉक्स किए गए पेजों पर पाबंदियों को बढ़ाने की ज़रूरत है, तो उन्हें जोड़ा जा सकता है:

{
  "name": "Very Secure Extension",
  "version": "1.0",
  "description": "Example of a Secure Extension",
   "content_security_policy": {
    "extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self';",
    "sandboxed_pages":"script-src 'self' 'wasm-unsafe-eval'; object-src 'self';"
  },

  "manifest_version": 3
}

document.write() और innerHTML से बचें

document.write() और innerHTML की मदद से, डाइनैमिक तरीके से एचटीएमएल एलिमेंट बनाना आसान हो सकता है. हालांकि, यह एक्सटेंशन को छोड़ देता है और उन वेब पेजों को छोड़ देता है जिन पर एक्सटेंशन निर्भर करता है. हमलावर, नुकसान पहुंचाने वाली स्क्रिप्ट शामिल कर सकते हैं. इसके बजाय, मैन्युअल रूप से DOM नोड बनाएं और डाइनैमिक कॉन्टेंट डालने के लिए, innerText का इस्तेमाल करें.

function constructDOM() {
  let newTitle = document.createElement('h1');
  newTitle.innerText = host;
  document.appendChild(newTitle);
}

कॉन्टेंट स्क्रिप्ट का इस्तेमाल ध्यान से करना

कॉन्टेंट स्क्रिप्ट अलग-अलग जगहों में रहते हैं, लेकिन इन पर हमलों का कोई असर नहीं पड़ता:

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

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

रजिस्टर करें और इनपुट की सफ़ाई करें

लिसनर को नुकसान पहुंचाने वाली स्क्रिप्ट से सुरक्षित रखने के लिए, लिसनर को सिर्फ़ एक्सटेंशन की उम्मीदों तक सीमित करें, आने वाले डेटा भेजने वालों की पुष्टि करें, और सभी इनपुट को साफ़ करें.

किसी एक्सटेंशन को runtime.onMessageExternal के लिए सिर्फ़ तब रजिस्टर करना चाहिए, जब उसे किसी बाहरी वेबसाइट या एक्सटेंशन से संपर्क करने की उम्मीद हो. हमेशा इस बात की पुष्टि करें कि ईमेल भेजने वाला, भरोसेमंद सोर्स से मेल खाता हो.

// The ID of an external extension
const kFriendlyExtensionId = "iamafriendlyextensionhereisdatas";

chrome.runtime.onMessageExternal.addListener(
  function(request, sender, sendResponse) {
    if (sender.id === kFriendlyExtensionId)
      doSomething();
});

यहां तक कि एक्सटेंशन से runtime.onMessage इवेंट से भेजे जाने वाले मैसेज की भी जांच की जानी चाहिए, ताकि यह पक्का किया जा सके कि MessageSender, किसी छेड़छाड़ की गई कॉन्टेंट स्क्रिप्ट से नहीं है.

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  if (request.allowedAction)
    console.log("This is an allowed action.");
});