নিরাপদে থাকুন

এক্সটেনশনগুলির ব্রাউজারের মধ্যে বিশেষ সুবিধাগুলিতে অ্যাক্সেস রয়েছে, যা তাদের আক্রমণকারীদের জন্য একটি আকর্ষণীয় লক্ষ্য করে তোলে৷ যদি একটি এক্সটেনশন আপস করা হয়, সেই এক্সটেনশনের প্রতিটি ব্যবহারকারী দূষিত এবং অবাঞ্ছিত অনুপ্রবেশের জন্য ঝুঁকিপূর্ণ হয়ে ওঠে। এই অনুশীলনগুলি অন্তর্ভুক্ত করে একটি এক্সটেনশনকে সুরক্ষিত রাখুন এবং এর ব্যবহারকারীদের সুরক্ষিত রাখুন।

বিকাশকারী অ্যাকাউন্টগুলি সুরক্ষিত করুন

এক্সটেনশন কোড আপলোড করা হয় এবং Google অ্যাকাউন্টের মাধ্যমে আপডেট করা হয়। যদি ডেভেলপারদের অ্যাকাউন্টে আপস করা হয়, তাহলে একজন আক্রমণকারী দূষিত কোড সরাসরি সমস্ত ব্যবহারকারীর কাছে ঠেলে দিতে পারে। বিশেষভাবে বিকাশকারী অ্যাকাউন্ট তৈরি করে এবং দ্বি-ফ্যাক্টর প্রমাণীকরণ সক্ষম করে, বিশেষত একটি সুরক্ষা কী দিয়ে এই অ্যাকাউন্টগুলিকে সুরক্ষিত করুন৷

গ্রুপ নির্বাচনী রাখুন

গ্রুপ প্রকাশনা ব্যবহার করলে, গ্রুপটিকে বিশ্বস্ত বিকাশকারীদের মধ্যে সীমাবদ্ধ রাখুন। অজানা ব্যক্তিদের থেকে সদস্যপদ অনুরোধ গ্রহণ করবেন না.

কখনই HTTP ব্যবহার করবেন না

অনুরোধ বা ডেটা পাঠানোর সময়, একটি HTTP সংযোগ এড়িয়ে চলুন। অনুমান করুন যে কোনও HTTP সংযোগে ইভড্রপার থাকবে বা পরিবর্তনগুলি থাকবে৷ HTTPS-কে সর্বদা অগ্রাধিকার দেওয়া উচিত, কারণ এতে অন্তর্নির্মিত নিরাপত্তা রয়েছে যা বেশিরভাগ ম্যান-ইন-দ্য-মিডল আক্রমণকে বাধা দেয়।

ন্যূনতম অনুমতির অনুরোধ করুন

ম্যানিফেস্টে স্পষ্টভাবে অনুরোধ করা বিশেষাধিকারগুলিতে Chrome ব্রাউজার একটি এক্সটেনশনের অ্যাক্সেস সীমিত করে৷ এক্সটেনশনগুলিকে শুধুমাত্র API এবং তারা নির্ভর করে এমন ওয়েবসাইটগুলি নিবন্ধন করে তাদের অনুমতিগুলি হ্রাস করা উচিত৷ স্বেচ্ছাচারী কোড একটি সর্বনিম্ন রাখা উচিত.

একটি এক্সটেনশন সুবিধা সীমিত করা একটি সম্ভাব্য আক্রমণকারী কি কাজে লাগাতে পারে তা সীমিত করে।

ক্রস-অরিজিন XMLHttpRequest

একটি এক্সটেনশন শুধুমাত্র XMLHttpRequest ব্যবহার করতে পারে নিজের থেকে এবং অনুমতিতে নির্দিষ্ট করা ডোমেন থেকে সংস্থান পেতে।

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

এই এক্সটেনশনটি অনুমতিতে "/*" এবং "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://*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
}

এক্সিকিউটেবল API এড়িয়ে চলুন

যে APIগুলি কোড চালায় সেগুলিকে নিরাপদ বিকল্প দিয়ে প্রতিস্থাপন করা উচিত৷

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-এর এমন অংশগুলিকে ম্যানিপুলেট করতে পারে যা বিষয়বস্তু স্ক্রিপ্টের উপর নির্ভর করে, বা বিস্ময়কর ওয়েব স্ট্যান্ডার্ড আচরণকে কাজে লাগাতে পারে, যেমন নামকৃত আইটেমগুলি
  • ওয়েব পৃষ্ঠাগুলির DOM-এর সাথে ইন্টারঅ্যাক্ট করতে, কন্টেন্ট স্ক্রিপ্টগুলিকে ওয়েব পৃষ্ঠার মতো একই রেন্ডারার প্রক্রিয়াতে কার্যকর করতে হবে। এটি কন্টেন্ট স্ক্রিপ্টগুলিকে পার্শ্ব চ্যানেল আক্রমণের মাধ্যমে ডেটা ফাঁস করার জন্য ঝুঁকিপূর্ণ করে তোলে (যেমন, স্পেকটার ), এবং যদি একটি দূষিত ওয়েব পৃষ্ঠা রেন্ডারার প্রক্রিয়ার সাথে আপস করে তবে আক্রমণকারীর দ্বারা দখল করা হয়।

সংবেদনশীল কাজ একটি ডেডিকেটেড প্রক্রিয়ায় করা উচিত, যেমন এক্সটেনশনের পটভূমি স্ক্রিপ্ট ৷ বিষয়বস্তু স্ক্রিপ্টগুলিতে দুর্ঘটনাক্রমে এক্সটেনশন সুবিধাগুলি প্রকাশ করা এড়িয়ে চলুন:

  • অনুমান করুন যে একটি বিষয়বস্তু স্ক্রিপ্ট থেকে বার্তাগুলি একটি আক্রমণকারী দ্বারা তৈরি করা হতে পারে (যেমন সমস্ত ইনপুট যাচাই করুন এবং স্যানিটাইজ করুন এবং ক্রস-সাইট স্ক্রিপ্টিং থেকে আপনার স্ক্রিপ্টগুলিকে রক্ষা করুন)৷
  • অনুমান করুন বিষয়বস্তু স্ক্রিপ্টে পাঠানো কোনো ডেটা ওয়েব পৃষ্ঠায় লিক হতে পারে। কন্টেন্ট স্ক্রিপ্টগুলিতে সংবেদনশীল ডেটা পাঠাবেন না (যেমন এক্সটেনশন থেকে গোপনীয়তা, অন্যান্য ওয়েব অরিজিন থেকে ডেটা, ব্রাউজিং ইতিহাস)।
  • বিষয়বস্তু স্ক্রিপ্ট দ্বারা ট্রিগার করা যেতে পারে যে বিশেষাধিকার কর্মের সুযোগ সীমিত. কন্টেন্ট স্ক্রিপ্টগুলিকে ইচ্ছামত ইউআরএল-এর অনুরোধ ট্রিগার করার অনুমতি দেবেন না বা এক্সটেনশন API-এ স্বেচ্ছাচারী আর্গুমেন্ট পাস করতে দেবেন না (যেমন, fetch বা chrome.tabs.create API-এর জন্য ইচ্ছামত ইউআরএল পাস করার অনুমতি দেবেন না)।

নিবন্ধন করুন এবং ইনপুট স্যানিটাইজ করুন

দূষিত স্ক্রিপ্ট থেকে একটি এক্সটেনশনকে রক্ষা করুন শ্রোতাদের শুধুমাত্র এক্সটেনশনটি যা আশা করছে তাতে সীমিত করে, আগত ডেটা প্রেরকদের যাচাই করে এবং সমস্ত ইনপুট স্যানিটাইজ করে৷

একটি এক্সটেনশন শুধুমাত্র 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.");
});

ব্যবহারকারীর ইনপুট এবং ইনকামিং ডেটা, এমনকি এক্সটেনশন নিজেই এবং অনুমোদিত উত্স থেকে স্যানিটাইজ করে আক্রমণকারীর স্ক্রিপ্ট চালানো থেকে একটি এক্সটেনশনকে প্রতিরোধ করুন৷ এক্সিকিউটেবল API এড়িয়ে চলুন

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