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

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

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

एक्सटेंशन कोड को 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 की मदद से, डाइनैमिक तौर पर एचटीएमएल एलिमेंट बनाना आसान हो सकता है, तो उस एक्सटेंशन को छोड़ दिया जाता है और उस एक्सटेंशन के वेब पेज, हमलावरों द्वारा आपके नुकसान पहुंचाने वाले स्क्रिप्ट हैं. इसके बजाय, मैन्युअल तरीके से डीओएम नोड बनाएं और डाइनैमिक कॉन्टेंट डालने के लिए, 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), और अगर नुकसान पहुंचाने वाले वेब पेज से छेड़छाड़ की जाती है, तो किसी हमलावर को उस पर हमला करना पड़ता है को रेंडर करने की प्रोसेस में शामिल हो सकते हैं.

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

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

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

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

किसी एक्सटेंशन को सिर्फ़ 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;');
}