Iframe tanpa kredensial: Sematkan iframe dengan mudah di lingkungan COEP

Arthur Sonzogni
Arthur Sonzogni

Developer yang menggunakan COEP kini dapat menyematkan iframe pihak ketiga yang tidak menggunakan COEP sendiri.

Iframe tanpa kredensial diaktifkan secara default dari Chrome versi 110. Solusi ini mengatasi keluhan paling umum yang dialami developer yang bekerja dengan Cross-Origin-Embedder-Policy (COEP): menyematkan iframe pihak ketiga yang tidak menetapkan COEP.

Alasan kami membutuhkan COEP

Beberapa web API meningkatkan risiko serangan side-channel seperti Spectre. Untuk mengurangi risiko tersebut, browser menawarkan lingkungan terisolasi berbasis keikutsertaan yang disebut isolasi lintas asal, yang memerlukan deployment COEP. Isolasi lintas asal memungkinkan situs menggunakan fitur dengan hak istimewa termasuk SharedArrayBuffer, performance.measureUserAgentSpecificMemory(), dan penghitung waktu presisi tinggi dengan resolusi yang lebih baik.

Untuk mengaktifkan isolasi lintas asal, situs harus mengirim header HTTP berikut:

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

COEP:credentialless juga dapat digunakan sebagai alternatif require-corp. Lihat dokumentasi untuk mengetahui detail lebih lanjut.

Tantangan dalam mengaktifkan COEP

Meskipun isolasi lintas asal memberikan keamanan yang lebih baik pada halaman web dan kemampuan untuk mengaktifkan fitur canggih, deployment COEP bisa jadi sulit. Salah satu tantangan terbesar adalah semua iframe lintas origin harus menerapkan COEP dan CORP. Iframe tanpa header tersebut tidak akan dimuat oleh browser.

Iframe tanpa kredensial dapat membantu

Kami ingin memperkenalkan <iframe credentialless> untuk membantu menyematkan iframe pihak ketiga yang tidak menetapkan COEP. Dengan menambahkan atribut credentialless ke elemen <iframe>, iframe dimuat dari konteks kosong yang berbeda. Secara khusus, file ini dimuat tanpa cookie. Tindakan ini memungkinkan penghapusan pembatasan COEP.

Contoh:

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

iframe ini dibuat dalam konteks singkat baru dan tidak memiliki akses ke cookie apa pun yang terkait dengan situs tingkat atas. Sebagai gantinya, itu diawali dengan stoples kue kosong. Demikian juga, API penyimpanan seperti LocalStorage, CacheStorage, IndexedDB, dan seterusnya, memuat dan menyimpan data di partisi efemeral yang baru. Partisi ini mencakup dokumen tingkat teratas saat ini dan asal iframe. Semua penyimpanan ini akan dihapus setelah dokumen tingkat atas dihapus muatannya.

iframe tanpa kredensial tidak tunduk pada aturan penyematan COEP. Cookie ini masih aman: karena setiap saat dimuat dari konteks kosong baru, link tidak boleh berisi data yang dipersonalisasi, yang dicari oleh penyerang. Jika iframe hanya berisi data publik, iframe tidak akan berharga bagi penyerang.

Demo

Anda dapat melihat demo iframe tanpa kredensial.

FAQ

Apakah fitur ini akan digunakan oleh browser lain?

Apakah <iframe> yang disusun bertingkat di dalam <iframe credentialless> tidak memiliki kredensial?

Ya. Turunan. Jika iframe tidak memiliki kredensial, iframe tersebut akan berlaku untuk semua iframe di seluruh subhierarki meskipun tanpa atribut credentialless.

Apakah pop-up yang dibuat dari <iframe credentialless> juga tidak memiliki kredensial?

Pop-up akan dibuka seolah-olah noopener disetel. Container dibuat dalam konteks tingkat atas reguler yang baru dan tidak bersifat tanpa kredensial. Komponen tersebut tidak dapat berkomunikasi dengan iframe tanpa kredensial.

Bagaimana cara mendeteksi dokumen yang telah disematkan dalam iframe tanpa kredensial?

window.credentialless bernilai benar di dalam iframe tanpa kredensial dan salah (false) jika tidak. Nilainya adalah undefined di browser web yang tidak mendukung <iframe credentialless>.

Resource