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. Metode ini mengatasi keluhan paling umum yang dimiliki developer yang bekerja dengan Cross-Origin-Embedder-Policy (COEP): menyematkan iframe pihak ketiga yang tidak menetapkan COEP.

Mengapa kita 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 origin, yang memerlukan deployment COEP. Isolasi lintas asal memungkinkan situs menggunakan fitur hak istimewa, termasuk SharedArrayBuffer, performance.measureUserAgentSpecificMemory(), dan timer presisi tinggi dengan resolusi yang lebih baik.

Untuk mengaktifkan isolasi lintas origin, 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 untuk require-corp. Lihat dokumentasi untuk detail lebih lanjut.

Tantangan dalam mengaktifkan COEP

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

Melakukan Iframe tanpa kredensial untuk membantu

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

Contoh:

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

Iframe ini dibuat dalam konteks sementara yang baru dan tidak memiliki akses ke cookie apa pun yang terkait dengan situs tingkat atas. Sebagai gantinya, hidangan tersebut dimulai dengan stoples kue kosong. Demikian pula, API penyimpanan seperti LocalStorage, CacheStorage, IndexedDB, dan seterusnya, memuat dan menyimpan data di partisi efemeral yang baru. Partisi ini tercakup dalam dokumen tingkat atas 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. Enkripsi ini tetap aman: karena dimuat dari konteks kosong yang baru setiap saat, pod tidak boleh berisi data yang dipersonalisasi, yang menjadi target penyerang. Jika iframe hanya berisi data publik, maka tidak berguna bagi penyerang.

Demo

Anda dapat melihat demo iframe tanpa kredensial.

FAQ

Apakah fitur ini akan digunakan oleh browser lain?

Apakah <iframe> bertingkat di dalam <iframe credentialless> tanpa kredensial?

Ya. Ini diwariskan. Setelah iframe tidak memiliki kredensial, iframe berlaku untuk semua iframe di seluruh subhierarki meskipun tanpa atribut credentialless.

Apakah pop-up juga dibuat dari <iframe credentialless> tanpa kredensial?

Pop-up dibuka seolah-olah noopener disetel. Kredensial dibuat dalam konteks level teratas reguler yang baru dan tidak tanpa kredensial. Pengguna tidak dapat berkomunikasi dengan iframe tanpa kredensial.

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

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

Referensi