এক্সটেনশন নিরাপত্তা উন্নত করুন

ম্যানিফেস্ট V3-এ নিরাপত্তা উন্নত করা

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

নির্বিচারে স্ট্রিং এর মৃত্যুদন্ড সরান

executeScript() , eval() , এবং new Function() ব্যবহার করে আপনি আর এক্সটার্নাল লজিক এক্সিকিউট করতে পারবেন না।

  • আপনার এক্সটেনশন বান্ডেলে সমস্ত বাহ্যিক কোড (JS, Wasm, CSS) সরান।
  • এক্সটেনশন বান্ডেল থেকে সম্পদ লোড করতে স্ক্রিপ্ট এবং শৈলীর রেফারেন্স আপডেট করুন।
  • রানটাইমে রিসোর্স ইউআরএল তৈরি করতে chrome.runtime.getURL() ব্যবহার করুন।
  • একটি স্যান্ডবক্সড আইফ্রেম ব্যবহার করুন: eval এবং new Function(...) এখনও স্যান্ডবক্সড আইফ্রেমে সমর্থিত। আরো বিস্তারিত জানার জন্য স্যান্ডবক্সড আইফ্রেমের নির্দেশিকা পড়ুন।

executeScript() পদ্ধতিটি এখন tabs নেমস্পেসের পরিবর্তে scripting নামস্থানে রয়েছে। কল আপডেট করার তথ্যের জন্য, মুভ executeScript() দেখুন।

কিছু বিশেষ ক্ষেত্রে রয়েছে যেখানে নির্বিচারে স্ট্রিংগুলি কার্যকর করা এখনও সম্ভব:

দূরবর্তী হোস্ট করা কোড সরান

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

  • জাভাস্ক্রিপ্ট ফাইল ডেভেলপারের সার্ভার থেকে টানা।
  • একটি CDN- এ হোস্ট করা যেকোনো লাইব্রেরি।
  • বান্ডেল করা তৃতীয় পক্ষের লাইব্রেরি যা গতিশীলভাবে দূরবর্তী হোস্ট করা কোড নিয়ে আসে।

আপনার ব্যবহারের ক্ষেত্রে এবং দূরবর্তী হোস্টিংয়ের কারণের উপর নির্ভর করে বিকল্প পদ্ধতি উপলব্ধ। এই বিভাগে বিবেচনা করার পন্থা বর্ণনা করে। আপনার যদি দূরবর্তী হোস্ট করা কোডের সাথে কাজ করতে সমস্যা হয় তবে আমাদের কাছে নির্দেশিকা উপলব্ধ রয়েছে

কনফিগারেশন-চালিত বৈশিষ্ট্য এবং যুক্তি

আপনার এক্সটেনশন রানটাইমে একটি দূরবর্তী কনফিগারেশন (উদাহরণস্বরূপ একটি JSON ফাইল) লোড করে এবং ক্যাশে করে। ক্যাশে করা কনফিগারেশন নির্ধারণ করে কোন বৈশিষ্ট্যগুলি সক্ষম করা হয়েছে।

একটি দূরবর্তী সেবা সঙ্গে বহিরাগত যুক্তি

আপনার এক্সটেনশন একটি দূরবর্তী ওয়েব পরিষেবা কল. এটি আপনাকে কোড ব্যক্তিগত রাখতে এবং Chrome ওয়েব স্টোরে পুনরায় জমা দেওয়ার অতিরিক্ত ওভারহেড এড়াতে প্রয়োজন অনুযায়ী এটি পরিবর্তন করতে দেয়৷

একটি স্যান্ডবক্সড আইফ্রেমে দূরবর্তীভাবে হোস্ট করা কোড এম্বেড করুন

দূরবর্তীভাবে হোস্ট করা কোড স্যান্ডবক্সড আইফ্রেমে সমর্থিত । অনুগ্রহ করে মনে রাখবেন যে কোডটি এমবেডিং পৃষ্ঠার DOM-এ অ্যাক্সেসের প্রয়োজন হলে এই পদ্ধতিটি কাজ করে না।

তৃতীয় পক্ষের লাইব্রেরি বান্ডিল করুন

আপনি যদি একটি জনপ্রিয় ফ্রেমওয়ার্ক যেমন রিঅ্যাক্ট বা বুটস্ট্র্যাপ ব্যবহার করেন যা আপনি পূর্বে একটি বাহ্যিক সার্ভার থেকে লোড করছেন, আপনি মিনিফাইড ফাইলগুলি ডাউনলোড করতে পারেন, সেগুলিকে আপনার প্রকল্পে যুক্ত করতে এবং স্থানীয়ভাবে আমদানি করতে পারেন৷ উদাহরণ স্বরূপ:

<script src="./react-dom.production.min.js"></script>
<link href="./bootstrap.min.css" rel="stylesheet">

একটি পরিষেবা কর্মীর মধ্যে একটি লাইব্রেরি অন্তর্ভুক্ত করতে ম্যানিফেস্টে "module" তে "background.type" কী সেট করুন এবং একটি import বিবৃতি ব্যবহার করুন৷

ট্যাব-ইনজেক্টেড স্ক্রিপ্টে বাহ্যিক লাইব্রেরি ব্যবহার করুন

আপনি scripting.executeScript() কল করার সময় files অ্যারেতে যোগ করে রানটাইমে বহিরাগত লাইব্রেরি লোড করতে পারেন। আপনি এখনও রানটাইমে দূরবর্তীভাবে ডেটা লোড করতে পারেন।

chrome.scripting.executeScript({
  target: {tabId: tab.id},
  files: ['jquery-min.js', 'content-script.js']
});

একটি ফাংশন ইনজেক্ট করুন

আপনার যদি আরও গতিশীলতার প্রয়োজন হয়, scripting.executeScript() এ নতুন func বৈশিষ্ট্য আপনাকে একটি বিষয়বস্তু স্ক্রিপ্ট হিসাবে একটি ফাংশন ইনজেক্ট করতে এবং args সম্পত্তি ব্যবহার করে ভেরিয়েবল পাস করতে দেয়।

ম্যানিফেস্ট V2
let name = 'World!';
chrome.tabs.executeScript({
  code: `alert('Hello, ${name}!')`
});

একটি পটভূমি স্ক্রিপ্ট ফাইলে.

ম্যানিফেস্ট V3
async function getCurrentTab() {/* ... */}
let tab = await getCurrentTab();

function showAlert(givenName) {
  alert(`Hello, ${givenName}`);
}

let name = 'World';
chrome.scripting.executeScript({
  target: {tabId: tab.id},
  func: showAlert,
  args: [name],
});

ব্যাকগ্রাউন্ডে সেবা কর্মী।

ক্রোম এক্সটেনশন নমুনা রেপোতে একটি ফাংশন ইনজেকশন উদাহরণ রয়েছে যার মাধ্যমে আপনি যেতে পারেন। getCurrentTab() এর একটি উদাহরণ সেই ফাংশনের রেফারেন্সে রয়েছে।

অন্যান্য সমাধানের জন্য দেখুন

যদি পূর্ববর্তী পদ্ধতিগুলি আপনার ব্যবহারের ক্ষেত্রে সাহায্য না করে তবে আপনাকে হয় একটি বিকল্প সমাধান খুঁজতে হবে (যেমন একটি ভিন্ন লাইব্রেরিতে স্থানান্তরিত করুন) অথবা লাইব্রেরির কার্যকারিতা ব্যবহার করার অন্যান্য উপায় খুঁজে বের করতে হবে। উদাহরণস্বরূপ, Google Analytics-এর ক্ষেত্রে, আপনি আমাদের Google Analytics 4 গাইডে বর্ণিত অফিসিয়াল রিমোট-হোস্টেড জাভাস্ক্রিপ্ট সংস্করণ ব্যবহার করার পরিবর্তে Google পরিমাপ প্রোটোকলে যেতে পারেন।

বিষয়বস্তু নিরাপত্তা নীতি আপডেট করুন

manifest.json ফাইল থেকে "content_security_policy" সরানো হয়নি, কিন্তু এটি এখন একটি অভিধান যা দুটি বৈশিষ্ট্য সমর্থন করে: "extension_pages" এবং "sandbox"

ম্যানিফেস্ট V2
{
  ...
  "content_security_policy": "default-src 'self'"
  ...
}
ম্যানিফেস্ট V3
{
  ...
  "content_security_policy": {
    "extension_pages": "default-src 'self'",
    "sandbox": "..."
  }
  ...
}

extension_pages : html ফাইল এবং পরিষেবা কর্মীদের সহ আপনার এক্সটেনশনের প্রসঙ্গগুলিকে বোঝায়৷

sandbox : আপনার এক্সটেনশন ব্যবহার করে এমন যেকোনো স্যান্ডবক্সযুক্ত এক্সটেনশন পৃষ্ঠাগুলিকে বোঝায়।

অসমর্থিত বিষয়বস্তু নিরাপত্তা নীতি সরান

ম্যানিফেস্ট V3 "extension_pages" ক্ষেত্রের কিছু বিষয়বস্তুর নিরাপত্তা নীতির মানকে অনুমোদন করে না যা ম্যানিফেস্ট V2-এ অনুমোদিত ছিল। বিশেষত ম্যানিফেস্ট V3 তাদের অনুমতি দেয় না যেগুলি দূরবর্তী কোড কার্যকর করার অনুমতি দেয়। script-src, object-src , এবং worker-src নির্দেশাবলীতে শুধুমাত্র নিম্নলিখিত মান থাকতে পারে:

  • self
  • none
  • wasm-unsafe-eval
  • শুধুমাত্র আনপ্যাক করা এক্সটেনশনগুলি: যেকোন লোকালহোস্ট সোর্স, ( http://localhost , http://127.0.0.1 , বা সেই ডোমেনের যেকোনো পোর্ট)

sandbox জন্য বিষয়বস্তুর নিরাপত্তা নীতির মানগুলিতে এমন কোনও নতুন বিধিনিষেধ নেই।