अगर आपकी वेबसाइट, 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()
या Channel Messages API जैसे अन्य तरीकों का इस्तेमाल करना होगा. हम इस बदलाव को जल्द से जल्द शिप करने के लिए, Chrome 112 को टारगेट कर रहे हैं. हालांकि, यह शिपिंग के इंटेंट से मिलने वाले जवाब पर निर्भर करता है.
अगर आपकी वेबसाइट 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
को सेट करने पर सुरक्षा से जुड़े नतीजों के बारे में ज़्यादा जानने के लिए, एमडीएन पर"Document.domain" पेज पढ़ें.
Chrome के प्लान के मुताबिक, Chrome 112 में document.domain
को नहीं बदला जा सकेगा.
मुझे कैसे पता चलेगा कि मेरी साइट पर असर हुआ है या नहीं?
अगर इस बदलाव से आपकी वेबसाइट पर असर पड़ता है, तो Chrome DevTools में समस्याएं पैनल में आपको चेतावनी देगा. सबसे ऊपर दाएं कोने में पीले रंग का फ़्लैग देखें.
अगर आपने रिपोर्टिंग एंडपॉइंट सेट अप किया है, तो आपको बंद होने की रिपोर्ट भी भेजी जाएंगी. रिपोर्ट इकट्ठा करने की मौजूदा सेवाओं की मदद से या अपना इन-हाउस समाधान बनाकर, Reporting API को इस्तेमाल करने के तरीके के बारे में ज़्यादा जानें.
आप अपनी साइट को Lighthouse से काम न करने वाले एपीआई ऑडिट के ज़रिए चलाकर उन सभी एपीआई का पता लगा सकते हैं जिन्हें Chrome से हटाने के लिए शेड्यूल किया गया है.
वैकल्पिक क्रॉस-ऑरिजिन कम्यूनिकेशन
फ़िलहाल, आपके पास अपनी वेबसाइट के लिए document.domain
की जगह तीन विकल्प हैं.
postMessage()
या Channel Messages API का इस्तेमाल करें
इस्तेमाल के ज़्यादातर मामलों में, क्रॉस-ऑरिजिन
postMessage()
या Channel Messaging API
document.domain
की जगह ले सकता है.
यहां दिए गए उदाहरण में:
https://parent.example.com
, DOM में हेरफेर करने के लिएpostMessage()
के ज़रिए मैसेज भेजकर, iframe मेंhttps://video.example.com
का अनुरोध करता है.- मैसेज मिलते ही
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()
या Channel Messages 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-keyed agent cluster से हैंडल किया जाना चाहिए या नहीं. Origin-Agent-Cluster
के बारे में ज़्यादा जानने के लिए, Origin-Agent-Cluster
हेडर की मदद से परफ़ॉर्मेंस आइसोलेशन का अनुरोध करना लेख पढ़ें.
यह हेडर भेजने पर, आपका दस्तावेज़ document.domain
को सेट करना जारी रख सकता है, भले ही वह डिफ़ॉल्ट रूप से न बदला जा सके.
एंटरप्राइज़ नीति के लिए OriginAgentClusterDefaultEnabled
को कॉन्फ़िगर करें
इसके अलावा, आपका एडमिन OriginAgentClusterDefaultEnabled
नीति को false
पर कॉन्फ़िगर कर सकता है, ताकि document.domain
को आपके पूरे संगठन में Chrome के इंस्टेंस पर डिफ़ॉल्ट रूप से सेट किया जा सके. ज़्यादा जानने के लिए, Chrome Enterprise की नीति की सूची और मैनेजमेंट | दस्तावेज़ पढ़ें.
वेबसाइट का अलग-अलग ब्राउज़र पर चलना
- शुरुआत की जगह की जानकारी में बताया गया है कि सुविधा को हटा दिया जाना चाहिए.
- Mozilla,
document.domain
को डिफ़ॉल्ट रूप से प्रोटोटाइपिंग के लायक बनाता है. - WebKit ने बताया कि वे
document.domain
सेटर को रोकने के बारे में कुछ हद तक सकारात्मक हैं.
रिसॉर्स
Document.domain
- वेब एपीआई | MDN- शुरुआत की जगह को अलग करना और बंद करना
document.domain
document.domain
को रोका जा रहा है. · समस्या #564 · w3ctag/design-reviews
स्वीकार हैं
Unsplash पर ब्रेडन एंडरसन की फ़ोटो