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

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

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

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

ग्रुप को चुनिंदा रखें

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

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

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

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

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

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

क्रॉस-ऑरिजिन XMLHttpRequest

कोई एक्सटेंशन खुद से और डोमेन से संसाधन पाने के लिए सिर्फ़ XMLHttpRequest का इस्तेमाल कर सकता है अनुमतियों में बताई गई हैं.

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

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

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

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

बाहरी रूप से कनेक्ट किया जा सकता है

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

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

वेब पर ऐक्सेस किए जा सकने वाले संसाधन

web_accessible_resources में जाकर, वेब से रिसॉर्स ऐक्सेस करने की अनुमति देने पर, वेबसाइटों और हमलावरों को एक्सटेंशन का पता चल जाएगा.

{
  ...
  "web_accessible_resources": [
    "images/*.png",
    "style/secure_extension.css",
    "script/secure_extension.js"
  ],
  ...
}

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

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

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

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

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

{
  "name": "Very Secure Extension",
  "version": "1.0",
  "description": "Example of a Secure Extension",
  "content_security_policy": "default-src 'self' https://extension.resource.com"
  "manifest_version": 2
}

एक्ज़ीक्यूटेबल एपीआई का इस्तेमाल न करना

कोड चलाने वाले एपीआई को सुरक्षित विकल्पों से बदला जाना चाहिए.

document.write() और innerHTML

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

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

eval()

हमलों को रोकने के लिए, जहां भी हो सके eval() का इस्तेमाल न करें. इसकी वजह यह है कि eval() हर उस कोड को एक्ज़ीक्यूट करेगा जिसे आपने लागू किया है जो नुकसान पहुंचाने वाला हो सकता है.

var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.example.com/data.json", true);
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4) {
    // WARNING! Might be evaluating an evil script!
    var resp = eval("(" + xhr.responseText + ")");
    ...
  }
}
xhr.send();

इसके बजाय, JSON.parse() जैसे सुरक्षित और तेज़ तरीकों को प्राथमिकता दें

var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.example.com/data.json", true);
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4) {
    // JSON.parse does not evaluate the attacker's scripts.
    var resp = JSON.parse(xhr.responseText);
  }
}
xhr.send();

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

कॉन्टेंट स्क्रिप्ट अलग-अलग देशों में रहती हैं, लेकिन उन पर होने वाले सायबर हमलों का असर नहीं होता:

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

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

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

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

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

// 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.");
});

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

function sanitizeInput(input) {
    return input.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/"/g, '&quot;');
}