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

Arthur Sonzogni
Arthur Sonzogni

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

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

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

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

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

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

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

सीओईपी को चालू करने में आने वाली चुनौतियां

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

सुरक्षा के लिए, क्रेडेंशियल के बिना 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 में एम्बेड किया गया है?

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

रिसॉर्स