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

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

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

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

सदस्यों की भूमिकाएं तय करना

अगर आपके पब्लिशर के पास एक से ज़्यादा सदस्य हैं, तो पक्का करें कि हर उपयोगकर्ता को दी गई भूमिका सही हो.

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

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

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

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

एक्सटेंशन के अधिकारों को सीमित करने से, संभावित हमलावर के पास एक्सटेंशन का गलत इस्तेमाल करने के कम मौके होते हैं.

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

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

{
  "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 के साथ इंटरैक्ट करने के लिए, कॉन्टेंट स्क्रिप्ट को वेब पेज के रेंडरर प्रोसेस में ही एक्ज़ीक्यूट करना होता है. इससे, कॉन्टेंट स्क्रिप्ट, साइड चैनल हमलों (जैसे, Spectre) के ज़रिए डेटा लीक करने के लिए संवेदनशील हो जाती हैं. साथ ही, अगर कोई नुकसान पहुंचाने वाला वेब पेज, रेंडरर प्रोसेस को हैक कर लेता है , तो हमलावर कॉन्टेंट स्क्रिप्ट को अपने कंट्रोल में ले सकता है.

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

इनपुट रजिस्टर करना और सैनिटाइज़ करना

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

किसी एक्सटेंशन को 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.");
});