Chrome, document.domain में बदलाव करने की सुविधा बंद करता है

अगर आपकी वेबसाइट, document.domain की मदद से डोमेन सेट करने की सुविधा का इस्तेमाल करती है, तो आपको कार्रवाई करनी होगी.

मौड नाल्पस
मॉड नालपास
एजी कितामुरा
आइजी कितामुरा

क्या बदलाव हो रहा है और क्यों?

Chrome 115 से, वेबसाइटें document.domain को सेट नहीं कर पाएंगी: Chrome, document.domain को म्यूट नहीं कर पाएगा. क्रॉस-ऑरिजिन का इस्तेमाल करने के लिए, आपको दूसरे तरीकों का इस्तेमाल करना होगा, जैसे कि postMessage() या Channel Messaging 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.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 आपको DevTools से जुड़ी समस्याओं वाले पैनल में चेतावनी देता है. यह चेतावनी 2022 में जोड़ी गई है. DevTools के ऊपर दाईं ओर पीले रंग का फ़्लैग देखें.

DevTools में समस्या की चेतावनी का स्क्रीनशॉट

Chrome से हटाए जाने के लिए शेड्यूल किए गए सभी एपीआई का पता लगाने के लिए, अपनी साइट को Lighthouse से काम न करने वाले एपीआई ऑडिट के ज़रिए भी चलाया जा सकता है.

अगर आपने Reporting API को सेट अप किया है, तो Chrome ने आपको इस एपीआई के बंद होने की रिपोर्ट भेजी है. इस रिपोर्ट से, आपको इसके बंद होने के बारे में सूचना दी जाएगी. रिपोर्ट इकट्ठा करने की मौजूदा सेवाओं की मदद से या अपना इन-हाउस सलूशन बनाकर, Reporting API को इस्तेमाल करने के तरीके के बारे में ज़्यादा जानें.

मैं इस बदलाव को कैसे देखता हूं?

यह बदलाव Chrome 115 में धीरे-धीरे रोल आउट किया जाएगा. इस बदलाव को लागू करते हुए देखने के लिए, भले ही इसे आपके Chrome ब्राउज़र में पहले ही रोल आउट न किया गया हो, आप इसे नीचे दिए गए तरीके से चालू कर सकते हैं:

  1. chrome://flags/#origin-agent-cluster-default खोलें
  2. चालू करें को चुनें.
  3. Chrome को रीस्टार्ट करें.

मैं कौनसे दूसरे विकल्पों का इस्तेमाल कर सकता/सकती हूं?

सबसे अच्छा विकल्प यह है कि आप document.domain में कोई भी बदलाव न करें. उदाहरण के लिए, एक ही ऑरिजिन पर पेज और सभी फ़्रेम को होस्ट करके. यह सभी ब्राउज़र के सभी वर्शन में काम करता है. हालांकि, इसके लिए ऐप्लिकेशन को फिर से काम करना पड़ सकता है. इसलिए, क्रॉस-ऑरिजिन ऐक्सेस के साथ काम करने वाले दूसरे विकल्पों पर भी ध्यान देना बेहतर होगा.

document.domain के बजाय postMessage() या Channel Messaging API का इस्तेमाल करें

इस्तेमाल के ज़्यादातर मामलों में, क्रॉस-ऑरिजिन postMessage() या Channel Messaging API document.domain की जगह ले सकता है.

यहां दिए गए उदाहरण में:

  1. https://parent.example.com, DOM में हेरफेर करने के लिए postMessage() के ज़रिए मैसेज भेजकर, iframe में https://video.example.com का अनुरोध करता है.
  2. मैसेज मिलते ही https://video.example.com, DOM में बदलाव करता है और सफलता की सूचना माता-पिता को देता है.
  3. 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 को सेट करना जारी रख सकता है, भले ही वह डिफ़ॉल्ट रूप से न बदला जा सके.

इसके अलावा, ऐसे सभी दस्तावेज़ों को भी Origin-Agent-Cluster भेजना होगा. ध्यान दें कि अगर सिर्फ़ एक दस्तावेज़ सेट किया जाता है, तो document.domain पर इसका कोई असर नहीं पड़ता.

एंटरप्राइज़ नीति के लिए OriginAgentClusterDefaultEnabled को कॉन्फ़िगर करें

इसके अलावा, आपका एडमिन OriginAgentClusterDefaultEnabled नीति को false पर कॉन्फ़िगर कर सकता है, ताकि document.domain को आपके पूरे संगठन में Chrome के इंस्टेंस पर डिफ़ॉल्ट रूप से सेट किया जा सके. ज़्यादा जानने के लिए, Chrome Enterprise की नीति की सूची और मैनेजमेंट | दस्तावेज़ पढ़ें.

रिसॉर्स

स्वीकार हैं

Unsplash पर फ़िनन अकबर की फ़ोटो