Resource lintas origin yang disalurkan oleh pihak ketiga sering kali tidak menyertakan header CORP yang memadai. Jika permintaan tersebut dapat diminta tanpa kredensial, kini Anda dapat mengaktifkan isolasi lintas asal dengan menandainya.
Kami telah mengirimkan nilai credentialless
Cross-Origin Embedder Policy (COEP)
yang baru yang memungkinkan browser memuat resource lintas origin yang
tidak menggunakan Cross-Origin Resource Policy (CORP), dengan mengirimkan permintaan tanpa
kredensial, seperti cookie. Hal ini membantu developer menerapkan isolasi lintas asal dengan lebih mudah.
Alasan kita memerlukan isolasi lintas asal
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. Dengan status terisolasi lintas origin,
halaman web dapat menggunakan fitur istimewa termasuk
SharedArrayBuffer
,
performance.measureUserAgentSpecificMemory()
dan timer presisi tinggi dengan resolusi yang lebih baik
sekaligus mengisolasi origin dari orang lain, kecuali jika diikutsertakan.
Halaman harus mengirim dua header HTTP untuk mengaktifkan isolasi lintas asal:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
Dengan status yang diisolasi lintas origin, semua resource lintas origin harus disalurkan
dengan CORS atau tetapkan header Cross-Origin-Resource-Policy
untuk dimuat.
Tantangan dalam mengaktifkan isolasi lintas asal
Meskipun isolasi lintas asal menghadirkan keamanan yang lebih baik untuk halaman web dan kemampuan untuk mengaktifkan fitur canggih, men-deploy-nya bisa jadi sulit. Salah satu tantangan terbesar adalah persyaratan untuk mengaktifkan CORS atau CORP untuk semua resource lintas asal. Resource tanpa header tersebut tidak akan dimuat oleh browser di halaman yang diisolasi lintas origin.
Resource lintas asal ini biasanya disalurkan oleh pihak ketiga yang mungkin tidak mudah untuk menambahkan header yang diperlukan.
Namun, bagaimana jika kita tahu bahwa resource cukup aman untuk dimuat? Bahkan, satu-satunya resource yang berisiko adalah resource yang diminta dengan kredensial, karena resource tersebut berpotensi menyertakan informasi sensitif yang tidak dapat dimuat sendiri oleh penyerang. Artinya, resource yang dapat diminta tanpa kredensial akan tersedia untuk publik dan aman untuk dimuat.
credentialless
siap membantu
Di sinilah COEP: credentialless
berperan. credentialless
adalah nilai baru
untuk header Cross-Origin-Embedder-Policy
. Serupa dengan require-corp
, API ini dapat mengaktifkan isolasi lintas asal, tetapi tidak memerlukan header CORP:cross-origin
untuk permintaan lintas origin tanpa nilai, melainkan dikirim tanpa kredensial (misalnya, cookie).
Anda dapat mengaktifkan isolasi lintas asal sebagai alternatif dengan dua header berikut:
Cross-Origin-Embedder-Policy: credentialless
Cross-Origin-Opener-Policy: same-origin
Artinya, server lintas origin yang diminta tidak akan dapat merespons dengan resource sensitif dan pemohon selalu dapat berasumsi bahwa responsnya hanya berisi informasi yang tersedia untuk publik.
Hal ini juga sesuai dengan rencana browser untuk menghentikan cookie pihak ketiga.
Demo
Anda dapat mencoba berbagai opsi header dalam demo ini: https://cross-origin-isolation.glitch.me
FAQ
Dapatkah saya mengirim permintaan berkredensial dalam lingkungan credentialless
?
Tentu saja, dengan mengorbankan mode permintaan untuk mewajibkan pemeriksaan CORS pada respons. Untuk tag HTML seperti <audio>
, <img>
, <link>
, <script>
,
dan <video>
, cukup tambahkan crossorigin="use-credentials"
secara eksplisit untuk memberi tahu
browser agar mengirim permintaan berkredensial.
Misalnya, meskipun dokumen pada https://www.example.com
memiliki header Cross-Origin-Embedder-Policy: credentialless
, <img
src="https://images.example.com/avatar.png" crossorigin="use-credentials">
akan mengirim permintaan berkredensial.
Untuk fetch()
API, request.mode = 'cors'
dapat digunakan.
Asalkan COEP: credentialless
, bagaimana COEP: require-corp
masih berguna untuk situs saya?
COEP: require-corp
tidak mengharuskan Anda mengalihkan mode permintaan secara manual ke CORS jika cookie diperlukan untuk beberapa subresource lintas origin.
Apakah saya juga dapat memuat iframe lintas origin tanpa header khusus dalam lingkungan credentialless
?
Tidak. Memuat iframe lintas origin dalam lingkungan credentialless
masih memerlukan kondisi yang sama seperti require-corp
. dokumen iframe harus ditayangkan dengan dua header:
Cross-Origin-Embedder-Policy: credentialless
(ataurequire-corp
)Cross-Origin-Resource-Policy: cross-origin
Kabar baiknya adalah, ada pembahasan berkelanjutan tentang mengizinkan pemuatan iframe lintas origin tanpa header tersebut dengan memberikan iframe crossorigin="anonymous"
.
Tindakan ini akan mengizinkan iframe lintas origin dimuat tanpa header, tetapi tanpa
kredensial.
Apakah fitur ini akan digunakan oleh browser lain?
- Masalah pelacakan Firefox
- Permintaan Webkit untuk posisi: Tidak ada sinyal
- W3C TAG Permintaan untuk posisi: Tertunda
Apa yang akan hadir berikutnya
Ada dua update tambahan yang akan hadir untuk memitigasi tantangan lain terkait isolasi lintas origin:
Pengguna yang mendaftar ke uji coba origin Chrome untuk memperluas perubahan SharedArrayBuffer karena berbagai hambatan di atas mungkin ingin tahu kapan pengujian tersebut akan dihentikan. Awalnya kami mengumumkan bahwa update ini akan dihentikan pada Chrome 96, tetapi kami telah memutuskan untuk menundanya ke Chrome 106.
Referensi
- Membuat situs Anda "diisolasi lintas origin" menggunakan COOP dan COEP
- Alasan Anda memerlukan "diisolasi lintas origin" untuk fitur canggih
- Panduan untuk mengaktifkan isolasi lintas asal
- Update SharedArrayBuffer di Android Chrome 88 dan Chrome 92 Desktop
Foto oleh Martin Adams di Unsplash