যদি আপনার ওয়েবসাইট document.domain
সেট করার উপর নির্ভর করে, তাহলে আপনার পদক্ষেপ প্রয়োজন।
আপডেট
- 30 মে, 2023 : আমরা ঘোষণা করেছি যে
document.domain
সেটারের অবচয় Chrome 115-এ কার্যকর হবে। - এপ্রিল 7, 2023 : আমরা Chrome 112-এ এই পরিবর্তনটি শিপিংয়ের আগে একটি সমস্যা চিহ্নিত করেছি।
document.domain
সেটার ডিফল্টরূপে সরানোর জন্য বর্তমানে সাসপেন্ড করা হয়েছে এবং নতুন শিপিং মাইলফলক এখনও নির্ধারণ করা হয়নি। অনুগ্রহ করে এই ব্লগ পোস্টে আবার দেখুন বা blink-dev এবং এই থ্রেডে সদস্যতা নিন। - জানুয়ারী 20, 2023 : আপডেট করা টাইমলাইন—
document.domain
সেটার ডিফল্টরূপে Chrome 112 থেকে শুরু করে সরিয়ে দেওয়া হবে। এছাড়াও,document.domain
আচরণ নিয়ন্ত্রণ করার জন্য এন্টারপ্রাইজ নীতি সম্পর্কে একটি উল্লেখ যোগ করা হয়েছে। - 25 জুলাই, 2022 : আপডেট করা টাইমলাইন—
document.domain
সেটার Chrome 109 থেকে শুরু করে ডিফল্টভাবে সরিয়ে দেওয়া হবে। - ফেব্রুয়ারী 4, 2022 : নতুন টাইমলাইনের সাথে আপডেট করা হয়েছে - আমরা Chrome 100 থেকে শুরু করে ইস্যু প্যানেলে একটি সতর্কতা দেখাব, Chrome 106 থেকে শুরু করে ডিফল্টরূপে
document.domain
সেটার সরিয়ে ফেলব।
document.domain
মূল হোস্টনাম পেতে বা সেট করার জন্য ডিজাইন করা হয়েছে।
Chrome এ, ওয়েবসাইটগুলি document.domain
সেট করতে অক্ষম হবে৷ ক্রস-অরিজিন যোগাযোগের জন্য আপনাকে বিকল্প পদ্ধতি ব্যবহার করতে হবে, যেমন postMessage()
বা চ্যানেল মেসেজিং API। আমরা Chrome 112 কে লক্ষ্য করছি এই পরিবর্তনটি দ্রুততম সময়ে পাঠানোর জন্য, কিন্তু এটি Intent to Ship- এর প্রতিক্রিয়ার উপর নির্ভরশীল।
যদি আপনার ওয়েবসাইট ঠিকভাবে কাজ করার জন্য document.domain
এর মাধ্যমে একই-অরিজিন নীতি শিথিলতার উপর নির্ভর করে, তাহলে সাইটটিকে একটি Origin-Agent-Cluster: ?0
শিরোনাম পাঠাতে হবে, যেমন অন্যান্য সমস্ত নথির জন্য সেই আচরণের প্রয়োজন হবে (মনে রাখবেন document.domain
শুধুমাত্র একটি নথি এটি সেট করলে কোন প্রভাব নেই)।
কেন document.domain
অপরিবর্তনীয়?
অনেক ওয়েবসাইট একই-সাইট কিন্তু ক্রস-অরিজিন পৃষ্ঠাগুলির মধ্যে যোগাযোগের অনুমতি দেওয়ার জন্য 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.com
এ https://video.example.com
বিপরীতে একটি ক্রস-অরিজিন DOM ম্যানিপুলেশন তৈরি করতে পারেন।
ওয়েবসাইটগুলি document.domain
সেট করে যাতে একই-সাইটের নথিগুলিকে আরও সহজে যোগাযোগ করা সম্ভব হয়৷ যেহেতু এই পরিবর্তনটি একই-অরিজিন নীতি শিথিল করে , তাই মূল পৃষ্ঠাটি iframe-এর নথিতে অ্যাক্সেস করতে এবং DOM ট্রি অতিক্রম করতে সক্ষম হয় এবং এর বিপরীতে।
এটি একটি সুবিধাজনক কৌশল, তবে এটি একটি নিরাপত্তা ঝুঁকি প্রবর্তন করে।
document.domain
এর সাথে নিরাপত্তা সংক্রান্ত উদ্বেগ
document.domain
আশেপাশে নিরাপত্তা সংক্রান্ত উদ্বেগের কারণে স্পেসিফিকেশনের পরিবর্তন হয়েছে যা ব্যবহারকারীদের এটি ব্যবহার এড়াতে সতর্ক করে । অন্যান্য ব্রাউজার বিক্রেতাদের সাথে বর্তমান আলোচনা একই দিকে চলছে।
উদাহরণস্বরূপ, যখন দুটি পৃষ্ঠা document.domain
সেট করে, তারা ভান করতে পারে যেন তারা একই-অরিজিন। এটি বিশেষভাবে গুরুত্বপূর্ণ যখন এই পৃষ্ঠাগুলি বিভিন্ন সাবডোমেনের সাথে একটি শেয়ার করা হোস্টিং পরিষেবা ব্যবহার করে৷ document.domain
সেট করা একই পরিষেবা দ্বারা হোস্ট করা অন্যান্য সমস্ত সাইটের অ্যাক্সেস খুলে দেয়, যা আক্রমণকারীদের আপনার সাইটগুলিতে অ্যাক্সেস করা সহজ করে তোলে৷ এটা সম্ভব কারণ document.domain
ডোমেনের পোর্ট নম্বর অংশটিকে উপেক্ষা করে।
document.domain
সেট করার নিরাপত্তার প্রভাব সম্পর্কে আরও জানতে, MDN-এ "Document.domain" পৃষ্ঠা পড়ুন।
Chrome 112-এ document.domain
অপরিবর্তনীয় করার পরিকল্পনা করছে৷
আমার সাইট প্রভাবিত হলে আমি কিভাবে জানব?
আপনার ওয়েবসাইট এই পরিবর্তন দ্বারা প্রভাবিত হলে, Chrome DevTools সমস্যা প্যানেলে সতর্ক করবে। উপরের ডানদিকে হলুদ পতাকাটি লক্ষ্য করুন।
আপনার কাছে রিপোর্টিং এন্ডপয়েন্ট সেট আপ থাকলে, আপনাকে অবচয় প্রতিবেদনও পাঠানো হবে। বিদ্যমান প্রতিবেদন সংগ্রহ পরিষেবাগুলির সাথে বা আপনার নিজস্ব ইন-হাউস সমাধান তৈরি করে রিপোর্টিং API কীভাবে ব্যবহার করবেন সে সম্পর্কে আরও জানুন।
Chrome থেকে সরানোর জন্য নির্ধারিত সমস্ত API খুঁজে পেতে আপনি LightHouse deprecated API অডিটের মাধ্যমে আপনার সাইট চালাতে পারেন৷
বিকল্প ক্রস-অরিজিন যোগাযোগ
এই সময়ে, আপনার ওয়েবসাইটের জন্য document.domain
প্রতিস্থাপন করার জন্য আপনার কাছে তিনটি বিকল্প রয়েছে।
postMessage()
বা চ্যানেল মেসেজিং API ব্যবহার করুন
বেশিরভাগ ব্যবহারের ক্ষেত্রে, ক্রস-অরিজিন postMessage()
বা চ্যানেল মেসেজিং API document.domain
প্রতিস্থাপন করতে পারে।
নিম্নলিখিত উদাহরণে:
-
https://parent.example.com
একটি আইফ্রেমের মধ্যেhttps://video.example.com
অনুরোধ করেpostMessage()
এর মাধ্যমে একটি বার্তা পাঠানোর মাধ্যমে DOM ম্যানিপুলেট করার জন্য। -
https://video.example.com
মেসেজ পাওয়ার সাথে সাথে DOM ম্যানিপুলেট করে এবং সাফল্যের কথা অভিভাবককে জানিয়ে দেয়। -
https://parent.example.com
সাফল্য স্বীকার করে।
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
সেট করা চালিয়ে যেতে পারে৷
এন্টারপ্রাইজ নীতির জন্য OriginAgentClusterDefaultEnabled
সক্রিয় কনফিগার করুন
ঐচ্ছিকভাবে, আপনার প্রশাসক আপনার প্রতিষ্ঠান জুড়ে ক্রোম ইন্সট্যান্সে document.domain
ডিফল্টভাবে সেট করার জন্য OriginAgentClusterDefaultEnabled
নীতিকে false
কনফিগার করতে পারেন। আরও জানতে, Chrome এন্টারপ্রাইজ নীতি তালিকা এবং ব্যবস্থাপনা পড়ুন | ডকুমেন্টেশন
ব্রাউজার সামঞ্জস্য
- অরিজিন স্পেসিফিকেশন , বলে যে বৈশিষ্ট্যটি সরানো উচিত।
- মোজিলা
document.domain
ডিফল্টভাবে অক্ষম করার কথা বিবেচনা করে প্রোটোটাইপ করার জন্য । - WebKit ইঙ্গিত করেছে যে তারা
document.domain
সেটারকে অবমূল্যায়ন করার বিষয়ে মাঝারিভাবে ইতিবাচক ।
সম্পদ
-
Document.domain
- ওয়েব APIs | MDN - অরিজিন আইসোলেশন এবং ডিপ্রেকেটিং
document.domain
-
document.domain
বর্জন করা হচ্ছে। · ইস্যু #564 · w3ctag/design-reviews