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

Arthur Sonzogni
Arthur Sonzogni

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

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

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

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

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

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

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

COEP को चालू करने में आने वाली चुनौतियां

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

बचाव के लिए बिना क्रेडेंशियल वाले Iframe

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

उदाहरण:

<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 में एम्बेड किए गए दस्तावेज़ का पता कैसे लगाएं?

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

संसाधन