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

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

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

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

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

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

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

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

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

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

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

ক্রস-অরিজিন ফেচ()

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

সংবেদনশীল ডেটা (যেমন ব্যবহারকারীর ব্যক্তিগত তথ্য) বা ব্রাউজারের ফাংশনগুলিতে অ্যাক্সেস সহ Chrome API ব্যবহার করে কাজগুলি এক্সটেনশনের পরিষেবা কর্মীতে করা উচিত৷ বিষয়বস্তু স্ক্রিপ্টগুলিতে দুর্ঘটনাক্রমে এক্সটেনশন সুবিধাগুলি প্রকাশ করা এড়িয়ে চলুন:

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

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

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

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