बिना क्रेडेंशियल के Iframe: COEP एनवायरमेंट में आसानी से iframe जोड़ें

Arthur Sonzogni
Arthur Sonzogni

सीओईपी का इस्तेमाल करने वाले डेवलपर, अब तीसरे पक्ष के ऐसे iframe एम्बेड कर सकते हैं जो सीओईपी का इस्तेमाल नहीं करते.

Chrome के वर्शन 110 से, क्रेडेंशियल के बिना iframe का इस्तेमाल करने की सुविधा डिफ़ॉल्ट रूप से चालू होती है. इससे, क्रॉस-ऑरिजिन-एम्बेडर-पॉलिसी (सीओईपी) के साथ काम करने वाले डेवलपर की सबसे आम शिकायत हल हो जाती है: तीसरे पक्ष के ऐसे iframe जो COEP सेट नहीं करते.

हमें सीओईपी की ज़रूरत क्यों है

कुछ वेब एपीआई, Spectre जैसे साइड-चैनल हमलों का खतरा बढ़ाते हैं. इस जोखिम को कम करने के लिए, ब्राउज़र में ऑप्ट-इन पर आधारित एक आइसोलेटेड एनवायरमेंट उपलब्ध कराया जाता है. इसे क्रॉस-ऑरिजिन आइसोलेशन कहा जाता है. इसके लिए, सीओईपी को डिप्लॉय करना ज़रूरी है. क्रॉस-ऑरिजिन आइसोलेशन की मदद से, वेबसाइटें SharedArrayBuffer, performance.measureUserAgentSpecificMemory(), और बेहतर रिज़ॉल्यूशन वाले सटीक टाइमर जैसी खास सुविधाओं का इस्तेमाल कर सकती हैं.

क्रॉस-ऑरिजिन आइसोलेशन की सुविधा चालू करने के लिए, वेबसाइटों को ये एचटीटीपी हेडर भेजने होंगे:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

require-corp के विकल्प के तौर पर, COEP:credentialless का भी इस्तेमाल किया जा सकता है. ज़्यादा जानकारी के लिए, दस्तावेज़ देखें.

सीओईपी चालू करने से जुड़ी समस्याएं

क्रॉस-ऑरिजिन आइसोलेशन की मदद से, वेबपेजों को बेहतर सुरक्षा मिलती है. साथ ही, इसमें बेहतर सुविधाएं चालू करने की सुविधा भी मिलती है. हालांकि, सीओईपी को डिप्लॉय करना मुश्किल हो सकता है. सबसे बड़ी चुनौती यह है कि सभी क्रॉस-ऑरिजिन iframes में COEP और CORP को डिप्लॉय करना ज़रूरी है. इन हेडर के बिना, ब्राउज़र iframes को लोड नहीं करेगा.

क्रेडेंशियल के बिना काम करने वाला iframe

हम <iframe credentialless> सुविधा लॉन्च कर रहे हैं. इससे, ऐसे तीसरे पक्ष के iframe को एम्बेड करने में मदद मिलेगी जो सीओईपी सेट नहीं करते. <iframe> एलिमेंट में credentialless एट्रिब्यूट जोड़ने से, iframe किसी दूसरे खाली कॉन्टेक्स्ट से लोड होता है. खास तौर पर, यह कुकी के बिना लोड होता है. इससे सीओईपी से जुड़ी पाबंदी हटाई जा सकती है.

उदाहरण:

<iframe credentialless src="https://example.com">

यह iframe, नए इफ़ेमरल कॉन्टेक्स्ट में बनाया जाता है. साथ ही, इसका टॉप लेवल वेबसाइट से जुड़ी किसी भी कुकी का ऐक्सेस नहीं होता. इसके बजाय, यह खाली कुकी के साथ शुरू होता है. इसी तरह, LocalStorage, CacheStorage, IndexedDB वगैरह जैसे स्टोरेज एपीआई, डेटा को नए इफ़ेमरल पार्टीशन में लोड और सेव करते हैं. यह पार्टीशन, मौजूदा टॉप-लेवल दस्तावेज़ और iframe के ऑरिजिन, दोनों के दायरे में आता है. टॉप-लेवल दस्तावेज़ को अनलोड करने के बाद, यह पूरा स्टोरेज खाली हो जाता है.

क्रेडेंशियल के बिना इस्तेमाल होने वाले iframe, सीओईपी के एम्बेड करने के नियमों के दायरे में नहीं आते. वे अब भी सुरक्षित हैं: हर बार नए खाली कॉन्टेक्स्ट से लोड होने की वजह से, उनमें उपयोगकर्ता के हिसाब से बनाया गया डेटा नहीं होना चाहिए. यही डेटा है जिस पर हमलावर नज़र रखते हैं. अगर किसी iframe में सिर्फ़ सार्वजनिक डेटा है, तो वह हमलावर के लिए काम का नहीं है.

डेमो

बिना क्रेडेंशियल वाले iframe का डेमो देखें.

अक्सर पूछे जाने वाले सवाल

क्या इस सुविधा को दूसरे ब्राउज़र भी अपनाएंगे?

क्या <iframe>, क्रेडेंशियल के बिना काम करने वाले <iframe credentialless> के अंदर नेस्ट किया गया है?

हां. इसे इनहेरिट किया जाता है. अगर किसी iframe में क्रेडेंशियल नहीं हैं, तो यह पूरे सबट्री में मौजूद सभी iframe पर लागू होता है. भले ही, उनमें credentialless एट्रिब्यूट न हो.

क्या <iframe credentialless> से बनाए गए पॉप-अप भी क्रेडेंशियल के बिना खुलते हैं?

पॉप-अप ऐसे खुलते हैं जैसे noopener सेट किया गया हो. इन्हें नए सामान्य टॉप-लेवल कॉन्टेक्स्ट में बनाया जाता है और इनमें क्रेडेंशियल की ज़रूरत नहीं होती. वे क्रेडेंशियल-लेस iframe से संपर्क नहीं कर सकते.

यह कैसे पता लगाया जा सकता है कि दस्तावेज़ को क्रेडेंशियल के बिना iframe में एम्बेड किया गया है?

window.credentialless, क्रेडेंशियल के बिना काम करने वाले iframe में 'सही' होता है और अन्य मामलों में 'गलत' होता है. <iframe credentialless> के साथ काम न करने वाले वेब ब्राउज़र में, इसकी वैल्यू undefined है.

संसाधन