Resource lintas origin yang ditayangkan oleh pihak ketiga sering kali tidak menyertakan header CORP yang memadai. Jika dapat diminta tanpa kredensial, Anda kini dapat mengaktifkan isolasi lintas asal dengan menandainya sebagaimana mestinya.
Kami telah mengirimkan nilai Cross-Origin Embedder Policy (COEP) yang baru
credentialless
yang memungkinkan browser memuat resource lintas origin yang
jangan gunakan Cross-Origin Resource Policy (CORP), dengan mengirim permintaan tanpa
kredensial yang berbeda, seperti cookie. Hal ini membantu developer mengadopsi
isolasi data dengan
lebih mudah.
Alasan diperlukannya isolasi lintas asal
Beberapa web API meningkatkan risiko serangan side-channel seperti
Spectre. Kepada
memitigasi risiko, {i>browser<i} menawarkan
lingkungan terisolasi berbasis {i>opt-in<i} yang disebut
isolasi lintas origin. Dengan cross-origin
dalam keadaan terisolasi, laman web dapat
menggunakan fitur hak istimewa termasuk
SharedArrayBuffer
,
performance.measureUserAgentSpecificMemory()
dan timer presisi tinggi dengan resolusi lebih baik
saat mengisolasi origin dari pihak lain, kecuali jika mereka diikutsertakan.
Halaman web harus mengirim dua header HTTP untuk mengaktifkan isolasi lintas asal:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
Dengan status terisolasi lintas origin, semua resource lintas origin harus ditayangkan
dengan CORS atau setel header Cross-Origin-Resource-Policy
untuk dimuat.
Tantangan dalam mengaktifkan isolasi lintas asal
Sementara isolasi lintas asal memberikan keamanan yang lebih baik pada halaman web dan kemampuan untuk mengaktifkan fitur canggih, menerapkannya bisa menjadi sulit. Salah satu yang terbesar tantangan adalah persyaratan untuk mengaktifkan CORS atau CORP untuk semua Google Cloud Platform. Resource tanpa header tersebut tidak akan dimuat oleh browser pada halaman yang diisolasi lintas origin.
Resource lintas asal ini biasanya ditayangkan oleh pihak ketiga yang mungkin tidak mudah untuk menambahkan {i>header<i} yang diperlukan.
Tetapi bagaimana jika kita tahu bahwa sumber daya itu cukup aman untuk dimuat? Bahkan, satu-satunya yang berisiko adalah yang diminta dengan kredensial, karena mereka berpotensi menyertakan informasi sensitif yang tidak dapat dimuat oleh penyerang sendiri. Artinya, resource yang dapat diminta tanpa kredensial ditampilkan secara publik yang tersedia dan aman untuk dimuat.
credentialless
untuk menolong
Di sinilah COEP: credentialless
berperan. credentialless
adalah nilai baru
untuk header Cross-Origin-Embedder-Policy
. Serupa dengan require-corp
, atribut ini dapat
mengaktifkan isolasi lintas asal, tetapi tidak memerlukan CORP:cross-origin
untuk permintaan lintas origin tanpa terkait, permintaan tersebut akan dikirim tanpa
(misalnya, cookie).
Sebagai alternatif, Anda akan dapat mengaktifkan isolasi lintas asal dengan dua {i>header<i} berikut:
Cross-Origin-Embedder-Policy: credentialless
Cross-Origin-Opener-Policy: same-origin
Artinya, server lintas asal yang diminta tidak akan dapat merespons dengan sumber daya sensitif dan pemohon dapat selalu berasumsi bahwa respons hanya berisi informasi yang tersedia untuk umum.
Hal ini juga selaras dengan rencana penghentian penggunaan cookie pihak ketiga.
Demo
Anda dapat mencoba berbagai opsi header dalam demo ini: https://cross-origin-isolation.glitch.me
FAQ
Dapatkah saya mengirim permintaan dengan kredensial dalam lingkungan credentialless
?
Tentu saja, dengan mengorbankan mode permintaan untuk memerlukan 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 untuk mengirim permintaan berkredensial.
Misalnya, meskipun dokumen di 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.
Menyediakan 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 cara mengizinkan pemuatan iframe lintas origin tanpa header tersebut dengan memberikan crossorigin="anonymous"
iframe.
Tindakan ini akan memungkinkan iframe lintas origin dimuat tanpa header, tetapi tanpa
memiliki kredensial yang lengkap.
Apakah fitur ini akan digunakan oleh browser lain?
- Masalah pelacakan Firefox
- Permintaan Webkit untuk posisi: Tidak ada sinyal
- W3C TAG Permintaan posisi: Tertunda
Apa yang akan terjadi selanjutnya
Ada dua pembaruan tambahan yang akan datang untuk mengurangi tantangan lain yang terkait dengan isolasi lintas asal:
Pengguna yang mendaftar ke uji coba origin Chrome untuk memperpanjang perubahan SharedArrayBuffer karena hambatan di atas mungkin bertanya tanya kapan sistem itu akan dihentikan. Awalnya kami mengumumkan akan dihentikan di Chrome 96, tetapi kami telah memutuskan untuk menundanya ke Chrome 106.
Resource
- Membuat situs Anda "diisolasi lintas origin" menggunakan COOP dan COEP
- Mengapa 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 nyala Buka Percikan