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.

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

Alasan kita memerlukan COEP

Beberapa API web meningkatkan risiko serangan side-channel seperti Spectre. Untuk memitigasi risiko tersebut, browser menawarkan lingkungan terisolasi berbasis keikutsertaan yang disebut isolasi lintas asal, yang memerlukan deployment COEP. Isolasi lintas origin memungkinkan situs menggunakan fitur dengan hak istimewa, termasuk SharedArrayBuffer, performance.measureUserAgentSpecificMemory(), dan timer 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 untuk require-corp. Lihat dokumentasi untuk mengetahui detail selengkapnya.

Tantangan dalam mengaktifkan COEP

Meskipun isolasi lintas-asal memberikan keamanan yang lebih baik dan kemampuan untuk mengaktifkan fitur yang canggih pada halaman web, men-deploy COEP dapat 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.

Iframe tanpa kredensial untuk menyelamatkan

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, halaman ini dimuat tanpa cookie. Hal ini memungkinkan penghapusan batasan COEP.

Contoh:

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

Iframe ini dibuat dalam konteks sementara baru dan tidak memiliki akses ke cookie apa pun yang terkait dengan situs tingkat teratas. Sebagai gantinya, proses ini dimulai dengan toples kue kosong. Demikian pula, API penyimpanan seperti LocalStorage, CacheStorage, IndexedDB, dan sebagainya, memuat dan menyimpan data di partisi sementara baru. Partisi dicakupkan ke dokumen tingkat teratas saat ini dan asal iframe. Semua penyimpanan ini akan dihapus setelah dokumen tingkat teratas di-unload.

Iframe tanpa kredensial tidak tunduk pada aturan penyematan COEP. Data tersebut tetap aman: karena dimuat dari konteks kosong baru setiap saat, data tersebut tidak boleh berisi data yang dipersonalisasi, yang menjadi sasaran penyerang. Jika hanya berisi data publik, iframe tidak akan bernilai bagi penyerang.

Demo

Anda dapat melihat demo iframe tanpa kredensial.

FAQ

Apakah fitur ini akan diadopsi oleh browser lain?

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

Ya. Ini diwariskan. Setelah iframe tidak memiliki kredensial, hal ini berlaku untuk semua iframe di seluruh sub-pohon meskipun tanpa atribut credentialless.

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

Pop-up dibuka seolah-olah noopener telah ditetapkan. Akun tersebut dibuat dalam konteks tingkat teratas reguler baru dan tidak tanpa kredensial. Mereka tidak dapat berkomunikasi dengan iframe tanpa kredensial.

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

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

Resource