Chrome document.domain পরিবর্তন করা অক্ষম করে৷

যদি আপনার ওয়েবসাইট document.domain সেট করার উপর নির্ভর করে, আপনার পদক্ষেপ প্রয়োজন।

কি পরিবর্তন হচ্ছে, এবং কেন?

Chrome 115 থেকে শুরু করে, ওয়েবসাইটগুলি document.domain সেট করতে অক্ষম হবে : Chrome document.domain অপরিবর্তনীয় করে তুলবে৷ ক্রস-অরিজিন যোগাযোগ করতে, আপনাকে বিকল্প পদ্ধতি ব্যবহার করতে হবে, যেমন postMessage() বা চ্যানেল মেসেজিং API।

মনে রাখবেন এই পরিবর্তনটি ধীরে ধীরে চালু করা হবে।

আমরা আশা করি যে অন্যান্য ব্রাউজারগুলি শেষ পর্যন্ত এই কার্যকারিতা অবমূল্যায়ন করবে এবং সরিয়ে দেবে। বিস্তারিত জানার জন্য ব্রাউজার সামঞ্জস্য বিভাগ পর্যালোচনা করুন.

কেন document.domain অপরিবর্তনীয়?

document.domain মূল হোস্টনাম পেতে বা সেট করার জন্য ডিজাইন করা হয়েছে। অনেক ওয়েবসাইট একই-সাইট কিন্তু ক্রস-অরিজিন পৃষ্ঠাগুলির মধ্যে যোগাযোগের অনুমতি দেওয়ার জন্য document.domain সেট করে।

যদিও এটি একটি সুবিধাজনক কৌশল, এটি একটি নিরাপত্তা ঝুঁকি প্রবর্তন করে, কারণ এটি একই-অরিজিন নীতি শিথিল করেdocument.domain এর আশেপাশে নিরাপত্তা সংক্রান্ত উদ্বেগের কারণে স্পেসিফিকেশনের পরিবর্তন হয়েছে যা ব্যবহারকারীদের এটি ব্যবহার এড়াতে সতর্ক করে

বিস্তারিত: কেন document.domain অপরিবর্তনীয় বানাবেন?

কিভাবে document.domain আজ ব্যবহার করা হয়

অনেক ওয়েবসাইট একই-সাইট কিন্তু ক্রস-অরিজিন পৃষ্ঠাগুলির মধ্যে যোগাযোগের অনুমতি দেওয়ার জন্য document.domain সেট করে।

একই-সাইট কিন্তু ক্রস-অরিজিন সাইটগুলিতে একই eTLD+1 কিন্তু ভিন্ন সাবডোমেন রয়েছে।

এখন পর্যন্ত document.domain কীভাবে ব্যবহার করা হয়েছিল তা এখানে:

ধরা যাক https://parent.example.com এর একটি পৃষ্ঠা https://video.example.com থেকে একটি iframe পৃষ্ঠা এম্বেড করে। এই পৃষ্ঠাগুলিতে বিভিন্ন সাবডোমেনের সাথে একই eTLD+1 ( example.com ) রয়েছে৷ যখন উভয় পৃষ্ঠার document.domain 'example.com' তে সেট করা হয়, তখন ব্রাউজার দুটি মূলকে একই-উৎস হিসাবে বিবেচনা করে।

https://parent.example.com এর জন্য document.domain সেট করুন:

// Confirm the current origin of "parent.example.com"
console.log(document.domain);

// Set the document.domain
document.domain = 'example.com';
console.log(document.domain);

https://video.example.com এর জন্য document.domain সেট করুন:

// Confirm the current origin of "video.example.com"
console.log(document.domain);

// Set the document.domain
document.domain = 'example.com';
console.log(document.domain);

আপনি এখন https://parent.example.comhttps://video.example.com বিপরীতে একটি ক্রস-অরিজিন DOM ম্যানিপুলেশন তৈরি করতে পারেন।

ওয়েবসাইটগুলি document.domain সেট করে যাতে একই-সাইটের নথিগুলিকে আরও সহজে যোগাযোগ করা সম্ভব হয়৷ যেহেতু এই পরিবর্তনটি একই-অরিজিন নীতি শিথিল করে , তাই মূল পৃষ্ঠাটি iframe-এর নথিতে অ্যাক্সেস করতে এবং DOM ট্রি অতিক্রম করতে সক্ষম হয় এবং এর বিপরীতে।

এটি একটি সুবিধাজনক কৌশল, তবে এটি একটি নিরাপত্তা ঝুঁকি প্রবর্তন করে।

document.domain এর সাথে নিরাপত্তা সংক্রান্ত উদ্বেগ

document.domain এর আশেপাশে নিরাপত্তা সংক্রান্ত উদ্বেগের কারণে স্পেসিফিকেশনের পরিবর্তন হয়েছে যা ব্যবহারকারীদের এটি ব্যবহার এড়াতে সতর্ক করে

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

document.domain সেট করার নিরাপত্তার প্রভাব সম্পর্কে আরও জানতে, MDN-এ "Document.domain" পৃষ্ঠাটি পড়ুন।

ব্রাউজার সামঞ্জস্য

আমার সাইট প্রভাবিত হলে আমি কিভাবে জানব?

আপনার ওয়েবসাইট এই পরিবর্তন দ্বারা প্রভাবিত হলে, Chrome আপনাকে DevTools সমস্যা প্যানেলে সতর্ক করে — এই সতর্কতাটি 2022 সালে যোগ করা হয়েছে। DevTools-এর উপরের ডানদিকে হলুদ পতাকাটি লক্ষ্য করুন।

DevTools-এ সমস্যা সতর্কতার স্ক্রিনশট

ক্রোম থেকে মুছে ফেলার জন্য নির্ধারিত সমস্ত APIগুলি খুঁজে পেতে আপনি LightHouse অপসারিত API অডিটের মাধ্যমেও আপনার সাইট চালাতে পারেন৷

আপনি যদি রিপোর্টিং API সেট আপ করে থাকেন, তাহলে Chrome আপনাকে এই আসন্ন অবচয় সম্পর্কে অবহিত করার জন্য অবচয় প্রতিবেদন পাঠিয়েছে। বিদ্যমান প্রতিবেদন সংগ্রহ পরিষেবাগুলির সাথে বা আপনার নিজস্ব ইন-হাউস সমাধান তৈরি করে রিপোর্টিং API কীভাবে ব্যবহার করবেন সে সম্পর্কে আরও জানুন।

আমি কিভাবে কর্ম এই পরিবর্তন দেখতে?

Chrome 115 থেকে শুরু করে পরিবর্তনটি ক্রমান্বয়ে চালু করা হবে। আপনার ক্রোম ব্রাউজারে এটি ইতিমধ্যে রোল আউট না হলেও কর্মের এই পরিবর্তন দেখতে, আপনি এটিকে নিম্নরূপ চালু করতে পারেন:

  1. chrome://flags/#origin-agent-cluster-default খুলুন
  2. সক্রিয় নির্বাচন করুন।
  3. Chrome পুনরায় চালু করুন।

আমি কি বিকল্প ব্যবহার করতে পারি?

সর্বোত্তম বিকল্প হল document.domain মোটেও পরিবর্তন না করা, উদাহরণস্বরূপ পৃষ্ঠা এবং সমস্ত উপাদান ফ্রেমগুলি একই উত্সের হোস্ট করে৷ এটি সমস্ত ব্রাউজারের সমস্ত সংস্করণে কাজ করে। তবে এটির জন্য একটি অ্যাপ্লিকেশনের যথেষ্ট পুনঃ-কাজের প্রয়োজন হতে পারে, তাই ক্রস-অরিজিন অ্যাক্সেসকে সমর্থন করে এমন বিকল্পগুলিও দেখতে হবে।

document.domain এর পরিবর্তে postMessage() বা চ্যানেল মেসেজিং API ব্যবহার করুন

বেশিরভাগ ব্যবহারের ক্ষেত্রে, ক্রস-অরিজিন postMessage() বা চ্যানেল মেসেজিং API document.domain প্রতিস্থাপন করতে পারে।

নিম্নলিখিত উদাহরণে:

  1. https://parent.example.com একটি আইফ্রেমের মধ্যে https://video.example.com অনুরোধ করে postMessage() এর মাধ্যমে একটি বার্তা পাঠানোর মাধ্যমে DOM ম্যানিপুলেট করার জন্য।
  2. https://video.example.com মেসেজ পাওয়ার সাথে সাথে DOM ম্যানিপুলেট করে এবং সাফল্যের কথা অভিভাবককে জানিয়ে দেয়।
  3. https://parent.example.com সাফল্য স্বীকার করে।

https: https://parent.example.com এ:

// Send a message to https://video.example.com
iframe.postMessage('Request DOM manipulation', 'https://video.example.com');

// Receive messages
iframe.addEventListener('message', (event) => {
  // Reject all messages except ones from https://video.example.com
  if (event.origin !== 'https://video.example.com') return;

  // Filter success messages
  if (event.data === 'succeeded') {
    // DOM manipulation is succeeded
  }
});

https://video.example.com এ:

// Receive messages
window.addEventListener('message', (event) => {
  // Reject all messages except ones from https://parent.example.com
  if (event.origin !== 'https://parent.example.com') return;

  // Do a DOM manipulation on https://video.example.com.

  // Send a success message to https://parent.example.com
  event.source.postMessage('succeeded', event.origin);
});

এটি চেষ্টা করুন এবং দেখুন কিভাবে এটি কাজ করে. আপনার যদি নির্দিষ্ট প্রয়োজনীয়তা থাকে যা postMessage() বা চ্যানেল মেসেজিং API-এর সাথে কাজ করবে না, তাহলে @ChromiumDev-এর মাধ্যমে Twitter- এ আমাদের জানান বা document.domain ট্যাগ সহ Stack Overflow-এ জিজ্ঞাসা করুন।

একটি শেষ অবলম্বন হিসাবে, Origin-Agent-Cluster: ?0 হেডার পাঠান

আপনার কাছে যদি document.domain সেট করা চালিয়ে যাওয়ার দৃঢ় কারণ থাকে, তাহলে আপনি Origin-Agent-Cluster: ?0 রেসপন্স হেডার টার্গেট ডকুমেন্টের সাথে পাঠাতে পারেন।

Origin-Agent-Cluster: ?0

Origin-Agent-Cluster হেডার ব্রাউজারকে নির্দেশ দেয় যে ডকুমেন্টটি অরিজিন-কীড এজেন্ট ক্লাস্টার দ্বারা পরিচালনা করা উচিত কিনা। Origin-Agent-Cluster সম্পর্কে আরও জানতে, Origin-Agent-Cluster শিরোনামের সাথে কর্মক্ষমতা বিচ্ছিন্নতার অনুরোধ পড়ুন।

আপনি যখন এই শিরোনামটি পাঠান, তখন আপনার নথিটি ডিফল্টরূপে অপরিবর্তনীয় হয়ে যাওয়ার পরেও document.domain সেট করা চালিয়ে যেতে পারে৷

অন্যান্য সমস্ত নথি যেগুলির জন্য এই আচরণের প্রয়োজন হয় সেগুলিকেও একটি Origin-Agent-Cluster পাঠাতে হবে (মনে রাখবেন যে document.domain যদি শুধুমাত্র একটি নথি সেট করে তবে কোন প্রভাব নেই)।

এন্টারপ্রাইজ নীতির জন্য OriginAgentClusterDefaultEnabled সক্রিয় কনফিগার করুন

ঐচ্ছিকভাবে, আপনার প্রশাসক আপনার প্রতিষ্ঠান জুড়ে ক্রোম ইন্সট্যান্সে document.domain ডিফল্টভাবে সেট করার জন্য OriginAgentClusterDefaultEnabled নীতিকে false কনফিগার করতে পারেন। আরও জানতে, Chrome এন্টারপ্রাইজ নীতি তালিকা এবং ব্যবস্থাপনা পড়ুন | ডকুমেন্টেশন

সম্পদ

স্বীকৃতি

আনস্প্ল্যাশে ফিনান আকবরের ছবি