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