Memuat resource lintas origin tanpa header CORP menggunakan COEP: tanpa kredensial

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 (atau require-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?

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

Foto oleh Martin Adams nyala Buka Percikan