COOP dan COEP Membentuk Cross-Origin Isolation sebagai Batas Grup Dokumen
Sebuah halaman web dapat bersifat same-origin dengan kode aplikasinya sendiri sambil tetap mempertahankan hubungan dengan popup, frame, worker, dan resource dari origin lain. Hubungan tersebut berpengaruh saat browser menentukan dokumen mana yang dapat berada dalam browsing context group yang sama dan capability mana yang aman untuk diberikan.
Cross-origin isolation mengubah susunan itu melalui dua response policy dengan tugas berbeda. Cross-Origin-Opener-Policy (COOP) mengontrol hubungan opener pada top-level dan perpindahan browsing context group. Cross-Origin-Embedder-Policy (COEP) membatasi resource lintas origin yang dapat dimuat oleh dokumen beserta turunannya. Saat digunakan bersama dalam konfigurasi yang diperlukan untuk isolasi, keduanya membentuk batas yang ditegakkan browser dan cakupannya lebih luas daripada same-origin policy saja.
COOP mengubah browsing context group pada top-level
HTML Standard mendefinisikan COOP sebagai policy yang melekat pada dokumen top-level. Dengan Cross-Origin-Opener-Policy: same-origin, navigasi dapat memaksa pembuatan top-level browsing context dan group baru ketika origin serta opener policy yang terkait tidak cocok.
Perpindahan group tersebut memengaruhi hubungan yang direpresentasikan melalui window.opener. Popup lintas origin yang berada di luar group milik opener tidak lagi mempertahankan hubungan opener aktif yang dapat tersedia pada susunan unsafe-none.
Mekanisme ini tidak sama dengan memblokir navigasi. Link atau script tetap dapat membuka origin lain selama policy browser lainnya mengizinkan. COOP mengubah pengelompokan dan hubungan opener di sekitar navigasi tersebut. Karena itu, COOP merupakan kontrol isolasi, bukan allowlist URL.
Perbedaan ini juga berlaku pada same-origin-allow-popups. Nilai tersebut mempertahankan kompatibilitas lebih besar dengan popup yang memakai policy default. Nilai itu tidak menghasilkan state isolasi yang sama dengan same-origin yang digabungkan dengan COEP kompatibel.
COEP membatasi apa yang dapat masuk ke lingkungan terisolasi
COEP bekerja pada sisi batas yang berbeda. Dokumen dengan Cross-Origin-Embedder-Policy: require-corp tidak dapat bebas meng-embed resource lintas origin dalam mode no-cors. Resource tersebut memerlukan response Cross-Origin-Resource-Policy yang berlaku atau perlu diambil melalui CORS ketika mode itu sesuai.
Pembatasan ini penting karena dokumen top-level tidak menjadi terisolasi hanya dengan memutus hubungan opener. Lingkungan eksekusinya masih dapat bergantung pada script, image, worker, font, dan response lain dari origin berbeda. COEP membuat dependency tersebut tunduk pada resource-sharing policy yang eksplisit.
Browser menjalankan enforcement tersebut. Kode aplikasi tidak menerima response yang dilarang lalu memutuskan sendiri apakah response itu dapat dipercaya. Response yang gagal memenuhi pemeriksaan embedder yang berlaku diblokir agar tidak menjadi embedded resource di lingkungan yang dilindungi.
credentialless adalah nilai COEP lain yang kompatibel dengan cross-origin isolation. Semantik pemuatan resource-nya berbeda dari require-corp: pada request no-cors lintas origin yang relevan, credential dihilangkan alih-alih mengharuskan setiap response semacam itu melakukan opt-in melalui CORP. Deployment tidak dapat memperlakukan kedua nilai sebagai alias tekstual meskipun keduanya dapat berperan dalam state isolasi.
State isolasi bergantung pada dua dimensi policy
Processing model HTML menghasilkan state opener-policy khusus ketika dokumen top-level memakai COOP same-origin dan nilai COEP yang kompatibel dengan cross-origin isolation. Browsing context group yang dibuat dalam state tersebut menerima cross-origin isolation mode.
Kombinasi ini mencegah konfigurasi yang tampak terisolasi karena opener sudah dipisahkan sementara konten lintas origin yang di-embed tetap tidak dibatasi. Mekanisme yang sama juga mencegah COEP saja dianggap sebagai batas opener top-level yang lengkap.
Bentuk response minimal yang umum terkait dengan kombinasi ketat tersebut adalah:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corpHeader tersebut tidak menyatakan bahwa setiap subresource pasti berhasil dimuat. Dependency lintas origin yang sudah ada dapat gagal bila response dan fetch mode-nya tidak memenuhi embedder policy yang dihasilkan. Biaya operasionalnya terlihat pada batas integrasi: CDN, host image, layanan font, worker script, dan origin lain mungkin memerlukan response policy yang kompatibel.
Isolasi lebih kuat dari pemeriksaan akses same-origin tetapi bukan sandbox situs
Same-origin policy terutama membatasi akses script lintas origin. COOP dan COEP menambah pembatasan pada pengelompokan dan resource embedding, tetapi tidak mengubah situs menjadi sandbox serbaguna.
Dokumen same-origin tetap dapat memiliki hubungan yang diizinkan platform. HTML Standard juga mencatat bahwa memutus hubungan opener saja tidak membentuk batas keamanan yang kuat antara dokumen same-origin. Trust pada level aplikasi di dalam satu origin tetap relevan.
Cross-origin isolation juga tidak menggantikan Content Security Policy. CSP dapat membatasi sumber script, tujuan frame, koneksi, dan kelas resource lain sesuai directive-nya. COEP berfokus pada kelayakan resource lintas origin untuk masuk ke lingkungan embedded berdasarkan policy-nya. Kedua kontrol dapat digunakan bersama karena mengatur keputusan yang berbeda.
Cross-origin isolation juga tidak mengautentikasi resource remote. Response yang memenuhi policy CORS atau CORP lolos dari pemeriksaan browser tersebut; identitas bisnis, integritas, dan properti authorization tetap bergantung pada mekanisme terpisah.
Capability gating merupakan konsekuensi dari batas isolasi
Browser menempatkan capability shared-memory atau beresolusi tinggi tertentu di balik cross-origin isolation karena capability tersebut meningkatkan kebutuhan terhadap pemisahan proses dan data. SharedArrayBuffer merupakan contoh utama dalam arsitektur web platform.
Sinyal aplikasi yang relevan adalah crossOriginIsolated. Nilai true menunjukkan bahwa environment memiliki cross-origin isolated capability sesuai processing model browser. State tersebut tidak tepat jika disimpulkan hanya dengan memeriksa satu response header dari kode aplikasi.
HTML Standard membedakan cross-origin isolation mode logical dan concrete. Keduanya merepresentasikan group yang dikonfigurasi dengan bentuk policy yang diperlukan, tetapi hanya mode concrete yang memberikan cross-origin isolated capability pada platform yang mampu menyediakan properti keamanan yang diperlukan. Batasnya menjadi jelas: policy header meminta dan membentuk isolasi, sedangkan user agent menentukan apakah capability benar-benar dapat diberikan.
Kompatibilitas popup dapat berkonflik dengan isolasi ketat
Aplikasi sering bergantung pada auxiliary window untuk autentikasi, pembayaran, penyuntingan dokumen, atau workflow lintas origin lainnya. COOP yang ketat dapat mengubah hubungan opener yang diharapkan flow tersebut.
Kondisi itu bukan tanda bahwa COOP gagal. Kondisi tersebut merupakan konsekuensi langsung dari pemindahan dokumen baru ke browsing context group berbeda. Desain yang bergantung pada referensi antar-window secara sinkron memiliki kebutuhan kompatibilitas yang dapat berkonflik dengan batas isolasi yang diinginkan.
Integrasi berbasis message dapat mengurangi ketergantungan pada hubungan object langsung, tetapi tidak menghapus pemeriksaan origin. postMessage tetap memerlukan pemilihan target origin yang cermat dan validasi di sisi penerima. Cross-origin isolation mengubah topologi browser; mekanisme itu tidak memvalidasi message aplikasi untuk kedua endpoint.
Report-only policy dapat membantu menampilkan group switch yang akan terjadi akibat enforcement sebelum deployment menerapkannya. Reporting tetap bersifat observasional dan tidak memberikan proteksi dari policy yang benar-benar ditegakkan.
Resource policy menjadi bagian dari arsitektur deployment
Batas praktis yang dibuat COOP dan COEP melampaui dokumen HTML yang mengirim header. Deployment COEP ketat dapat gagal karena satu response lintas origin yang diperlukan tidak memiliki perilaku CORS atau CORP yang kompatibel. Deployment COOP ketat dapat mengganggu workflow popup karena aplikasi bergantung pada hubungan opener yang tidak lagi dipertahankan browsing context group baru.
Hal tersebut menjadikan cross-origin isolation sebagai properti arsitektur, bukan sekadar sepasang security header dekoratif. Dokumen top-level, topologi popup, graph worker, fetch mode, dan response policy dari origin resource eksternal ikut menentukan apakah lingkungan terisolasi tetap berfungsi.
Efek keamanannya juga spesifik. COOP mengontrol pengelompokan dokumen pada batas navigasi top-level; COEP membatasi embedding lintas origin; kombinasi yang kompatibel dapat membentuk state browser yang diperlukan untuk cross-origin isolated capability. Tidak satu pun dari kedua header menggantikan authorization, content integrity, CSP, atau validasi origin pada level aplikasi. Nilai batas tersebut justru berasal dari cakupannya yang terdefinisi, bukan dari klaim perlindungan universal.