ম্যানিফেস্ট V3-তে নিরাপত্তা উন্নত করা
এক্সটেনশন সার্ভিস ওয়ার্কারের অংশ নয় এমন কোডের জন্য প্রয়োজনীয় পরিবর্তনগুলো বর্ণনা করে এমন তিনটি অংশের মধ্যে এটি শেষ অংশ। এতে এক্সটেনশনের নিরাপত্তা উন্নত করার জন্য প্রয়োজনীয় পরিবর্তনগুলো বর্ণনা করা হয়েছে। অন্য দুটি অংশে ম্যানিফেস্ট ভি৩-তে আপগ্রেড করার জন্য আপনার কোড আপডেট করা এবং ব্লকিং ওয়েব রিকোয়েস্টগুলো প্রতিস্থাপন করার বিষয়গুলো আলোচনা করা হয়েছে।
যথেচ্ছ স্ট্রিং কার্যকর করা বন্ধ করুন
আপনি এখন থেকে executeScript() , eval() , এবং new Function() ব্যবহার করে এক্সটার্নাল লজিক এক্সিকিউট করতে পারবেন না।
- সমস্ত বাহ্যিক কোড (JS, Wasm, CSS) আপনার এক্সটেনশন বান্ডেলে স্থানান্তর করুন।
- এক্সটেনশন বান্ডেল থেকে রিসোর্স লোড করার জন্য স্ক্রিপ্ট এবং স্টাইল রেফারেন্স আপডেট করুন।
- রানটাইমে রিসোর্স ইউআরএল তৈরি করতে
chrome.runtime.getURL()ব্যবহার করুন। - স্যান্ডবক্সড আইফ্রেম ব্যবহার করুন:
evalএবংnew Function(...)এখনও স্যান্ডবক্সড আইফ্রেমে সমর্থিত। আরও বিস্তারিত জানতে স্যান্ডবক্সড আইফ্রেমের নির্দেশিকাটি পড়ুন।
executeScript() মেথডটি এখন tabs নেমস্পেসের পরিবর্তে scripting নেমস্পেসে রয়েছে। কল আপডেট করার তথ্যের জন্য, Move executeScript() দেখুন।
এমন কয়েকটি বিশেষ ক্ষেত্র রয়েছে যেখানে যথেচ্ছ স্ট্রিং কার্যকর করা এখনও সম্ভব:
- insertCSS ব্যবহার করে একটি ওয়েব পেজে রিমোট হোস্টেড স্টাইলশীট যুক্ত করুন।
-
chrome.devtoolsব্যবহারকারী এক্সটেনশনগুলির জন্য: inspectWindow.eval পরিদর্শিত পৃষ্ঠার প্রেক্ষাপটে জাভাস্ক্রিপ্ট কার্যকর করার সুযোগ দেয়। - ডিবাগার এক্সটেনশনগুলো একটি ডিবাগ টার্গেটে জাভাস্ক্রিপ্ট এক্সিকিউট করার জন্য chrome.debugger.sendCommand ব্যবহার করতে পারে।
দূরবর্তীভাবে হোস্ট করা কোড সরান
Manifest V3-তে, আপনার এক্সটেনশনের সমস্ত লজিক অবশ্যই এক্সটেনশন প্যাকেজের অংশ হতে হবে। Chrome Web Store-এর নীতি অনুযায়ী, আপনি আর দূরবর্তীভাবে হোস্ট করা ফাইল লোড এবং এক্সিকিউট করতে পারবেন না। উদাহরণস্বরূপ:
- ডেভেলপারের সার্ভার থেকে জাভাস্ক্রিপ্ট ফাইলগুলো আনা হয়েছে।
- CDN- এ হোস্ট করা যেকোনো লাইব্রেরি।
- বান্ডেল করা থার্ড-পার্টি লাইব্রেরি, যেগুলো ডায়নামিকভাবে রিমোট হোস্টেড কোড ফেচ করে।
আপনার ব্যবহারের ক্ষেত্র এবং রিমোট হোস্টিংয়ের কারণের উপর নির্ভর করে বিকল্প পন্থা রয়েছে। এই বিভাগে বিবেচনা করার মতো পন্থাগুলো বর্ণনা করা হয়েছে। রিমোট হোস্টেড কোড নিয়ে কাজ করতে আপনার কোনো সমস্যা হলে, আমাদের নির্দেশিকা রয়েছে।
কনফিগারেশন-চালিত বৈশিষ্ট্য এবং যুক্তি
আপনার এক্সটেনশনটি রানটাইমে একটি রিমোট কনফিগারেশন (যেমন একটি JSON ফাইল) লোড ও ক্যাশ করে। এই ক্যাশ করা কনফিগারেশনই নির্ধারণ করে কোন ফিচারগুলো সক্রিয় থাকবে।
রিমোট সার্ভিস সহ এক্সটার্নালাইজড লজিক
আপনার এক্সটেনশনটি একটি রিমোট ওয়েব সার্ভিসকে কল করে। এর ফলে আপনি কোড গোপন রাখতে এবং প্রয়োজন অনুযায়ী পরিবর্তন করতে পারেন, এবং একই সাথে ক্রোম ওয়েব স্টোরে পুনরায় জমা দেওয়ার বাড়তি ঝামেলাও এড়াতে পারেন।
দূরবর্তীভাবে হোস্ট করা কোড একটি স্যান্ডবক্সড আইফ্রেমে এম্বেড করুন
স্যান্ডবক্সড আইফ্রেমে রিমোটলি হোস্ট করা কোড সমর্থিত । অনুগ্রহ করে মনে রাখবেন যে, যদি কোডটির এমবেডিং পেজের DOM-এ অ্যাক্সেসের প্রয়োজন হয়, তবে এই পদ্ধতিটি কাজ করবে না।
তৃতীয় পক্ষের লাইব্রেরিগুলি বান্ডল করুন
আপনি যদি React বা Bootstrap-এর মতো কোনো জনপ্রিয় ফ্রেমওয়ার্ক ব্যবহার করেন যা আগে কোনো বাহ্যিক সার্ভার থেকে লোড করতেন, তাহলে আপনি মিনিফাইড ফাইলগুলো ডাউনলোড করে আপনার প্রজেক্টে যোগ করতে এবং স্থানীয়ভাবে ইম্পোর্ট করতে পারেন। উদাহরণস্বরূপ:
<script src="./react-dom.production.min.js"></script>
<link href="./bootstrap.min.css" rel="stylesheet">
সার্ভিস ওয়ার্কারে কোনো লাইব্রেরি অন্তর্ভুক্ত করতে, ম্যানিফেস্টে "background.type" কী-টির মান "module" সেট করুন এবং একটি import স্টেটমেন্ট ব্যবহার করুন।
ট্যাব-ইনজেক্টেড স্ক্রিপ্টে বাহ্যিক লাইব্রেরি ব্যবহার করুন
আপনি scripting.executeScript() কল করার সময় files অ্যারেতে এক্সটার্নাল লাইব্রেরিগুলো যোগ করে রানটাইমেও লোড করতে পারেন। আপনি রানটাইমে রিমোটলিও লোড করতে পারবেন।
chrome.scripting.executeScript({
target: {tabId: tab.id},
files: ['jquery-min.js', 'content-script.js']
});
একটি ফাংশন ইনজেক্ট করুন
যদি আপনার আরও গতিশীলতার প্রয়োজন হয়, তাহলে scripting.executeScript() এর নতুন func প্রপার্টিটি আপনাকে একটি ফাংশনকে কন্টেন্ট স্ক্রিপ্ট হিসেবে যুক্ত করতে এবং args প্রপার্টি ব্যবহার করে ভেরিয়েবল পাস করার সুযোগ দেয়।
let name = 'World!'; chrome.tabs.executeScript({ code: `alert('Hello, ${name}!')` });
একটি ব্যাকগ্রাউন্ড স্ক্রিপ্ট ফাইলে।
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], });
ব্যাকগ্রাউন্ড সার্ভিস ওয়ার্কার।
Chrome Extension Samples রিপোটিতে একটি ফাংশন ইনজেকশন উদাহরণ রয়েছে যা আপনি ধাপে ধাপে অনুসরণ করতে পারেন। getCurrentTab() ফাংশনটির একটি উদাহরণ সেই ফাংশনের রেফারেন্সে দেওয়া আছে।
অন্যান্য বিকল্প উপায় খুঁজুন
যদি পূর্ববর্তী পদ্ধতিগুলো আপনার প্রয়োজন মেটাতে না পারে, তাহলে আপনাকে হয় একটি বিকল্প সমাধান খুঁজতে হবে (যেমন অন্য কোনো লাইব্রেরিতে স্থানান্তরিত হওয়া) অথবা লাইব্রেরিটির কার্যকারিতা ব্যবহারের জন্য অন্য উপায় খুঁজে বের করতে হবে। উদাহরণস্বরূপ, গুগল অ্যানালিটিক্স-এর ক্ষেত্রে, আপনি আমাদের গুগল অ্যানালিটিক্স ৪ গাইডে বর্ণিত অফিসিয়াল রিমোটলি-হোস্টেড জাভাস্ক্রিপ্ট সংস্করণটি ব্যবহার না করে গুগল মেজারমেন্ট প্রোটোকলে চলে যেতে পারেন।
বিষয়বস্তু নিরাপত্তা নীতি আপডেট করুন
"content_security_policy" manifest.json ফাইল থেকে সরানো হয়নি, তবে এটি এখন একটি ডিকশনারি যা "extension_pages" এবং "sandbox" নামে দুটি প্রপার্টি সমর্থন করে।
{ ... "content_security_policy": "default-src 'self'" ... }
{ ... "content_security_policy": { "extension_pages": "default-src 'self'", "sandbox": "..." } ... }
extension_pages : আপনার এক্সটেনশনের অন্তর্ভুক্ত বিষয়গুলোকে বোঝায়, যার মধ্যে এইচটিএমএল ফাইল এবং সার্ভিস ওয়ার্কারও রয়েছে।
sandbox : আপনার এক্সটেনশন দ্বারা ব্যবহৃত যেকোনো স্যান্ডবক্সযুক্ত এক্সটেনশন পেজকে বোঝায়।
অসমর্থিত বিষয়বস্তু নিরাপত্তা নীতিগুলি সরান
Manifest V3-তে "extension_pages" ফিল্ডের কিছু নির্দিষ্ট কন্টেন্ট সিকিউরিটি পলিসি ভ্যালু নিষিদ্ধ করা হয়েছে, যা Manifest V2-তে অনুমোদিত ছিল। বিশেষত, Manifest V3 সেই ভ্যালুগুলোকে নিষিদ্ধ করেছে যেগুলো রিমোট কোড এক্সিকিউশনের অনুমতি দেয়। script-src, object-src , এবং worker-src ডিরেক্টিভগুলোতে শুধুমাত্র নিম্নলিখিত ভ্যালুগুলো থাকতে পারে:
-
self -
none -
wasm-unsafe-eval - শুধুমাত্র আনপ্যাক করা এক্সটেনশনগুলির জন্য: যেকোনো লোকালহোস্ট উৎস, (
http://localhost,http://127.0.0.1, অথবা ঐ ডোমেইনগুলির যেকোনো পোর্ট)
sandbox জন্য কন্টেন্ট নিরাপত্তা নীতির মানগুলিতে এমন কোনো নতুন বিধিনিষেধ নেই।