COEP kullanarak CORP başlıkları olmayan kaynaklar arası kaynakları yükleme: kimlik bilgisi yok

Üçüncü tarafların sunduğu kaynaklar arası kaynaklar genellikle yeterli CORP başlıkları içermez. Kimlik bilgileri olmadan istenebiliyorlarsa artık bunları işaretleyerek kaynak ayırmayı etkinleştirebilirsiniz.

Tarayıcıya, çerezler gibi kimlik bilgileri olmadan istek göndererek Merkezler Arası Kaynak Politikası'nı (CORP) kullanmayan merkezler arası kaynakları yüklemesine olanak tanıyan yeni Merkezler Arası Yerleştiren Politikası (COEP) değerini credentialless kullanıma sunduk. Bu, geliştiricilerin kaynak ayırmayı daha kolay benimsemesine yardımcı olur.

Kökler arası erişime kapalılığa neden ihtiyacımız var?

Bazı web API'leri, Spectre gibi yan kanal saldırısı riskini artırır. Tarayıcılarda, bu riski azaltmak için kökler arası izolasyon adı verilen etkinleştirmeye dayalı bir izole ortam sunulur. Kökler arası erişime kapalı web sayfası; SharedArrayBuffer, performance.measureUserAgentSpecificMemory() ve daha iyi çözünürlüklü yüksek hassasiyetli zamanlayıcılar gibi ayrıcalıklı özellikleri kullanırken, etkinleştirilmediği sürece kaynağı diğer kullanıcılardan izole edebilir.

Kökler arası erişimin kapatılması için web sayfası iki HTTP üst bilgisi göndermelidir:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

Kökler arası izole durumda, tüm kökler arası kaynaklar CORS ile sunulmalı veya yüklenecek bir Cross-Origin-Resource-Policy başlığı ayarlanmalıdır.

Kökler arası erişime kapalı web sitelerinin etkinleştirilmesiyle ilgili zorluklar

Kökler arası erişime kapalı web siteleri, web sayfalarına daha iyi güvenlik ve güçlü özellikleri etkinleştirme olanağı sunsa da dağıtımı zor olabilir. En büyük zorluklardan biri, tüm kaynak dışı kaynaklar için CORS veya CORP'un etkinleştirilmesi şartıdır. Bu başlıkları içermeyen kaynaklar, tarayıcı tarafından kaynakta izole edilmiş bir sayfada yüklenmez.

Bu kaynakta farklı kaynaklı kaynaklar genellikle gerekli başlıkları eklemesi kolay olmayabilecek üçüncü taraflarca yayınlanır.

Peki kaynağın yüklenmek için yeterince güvenli olduğunu biliyorsak ne olur? Aslında, risk altındaki tek kaynaklar kimlik bilgileriyle istenen kaynaklardır. Bunun nedeni, saldırganın tek başına yükleyemeyeceği hassas bilgileri içermeleridir. Bu, kimlik bilgileri olmadan istenebilecek kaynakların herkese açık olduğu ve yüklenmesinin güvenli olduğu anlamına gelir.

credentialless

İşte bu noktada COEP: credentialless devreye giriyor. credentialless, Cross-Origin-Embedder-Policy başlığı için yeni bir değerdir. require-corp'e benzer şekilde, kökler arası erişimin kapatılmasını sağlayabilir ancak kökler arası erişimi kapatılmış isteklerde CORP:cross-origin başlığı yerine kimlik bilgileri (ör. çerezler) olmadan gönderilir.

Alternatif olarak aşağıdaki iki başlıkla kökler arası izolasyonu etkinleştirebilirsiniz:

Cross-Origin-Embedder-Policy: credentialless
Cross-Origin-Opener-Policy: same-origin

Bu, istenen kaynakta farklı sunucuların hassas bir kaynakla yanıt veremeyeceği anlamına gelir ve istek sahibi, yanıtın her zaman herkese açık bilgiler içerdiğini varsayabilir.

Bu, tarayıcıların üçüncü taraf çerezlerini aşamalı olarak kullanımdan kaldırma planıyla da uyumludur.

Demo

Bu demoda çeşitli başlık seçeneklerini deneyebilirsiniz: https://cross-origin-isolation.glitch.me

SSS

credentialless ortamında kimlik bilgisi içeren bir istek gönderebilir miyim?

Elbette isteğin modunu yanıtta bir CORS kontrolü gerektirecek şekilde değiştirmek pahasına. <audio>, <img>, <link>, <script> ve <video> gibi HTML etiketleri için tarayıcıya kimlik bilgisi içeren istekler göndermesini bildirmek üzere crossorigin="use-credentials" etiketini açıkça eklemeniz yeterlidir.

Örneğin, https://www.example.com'teki bir belgede Cross-Origin-Embedder-Policy: credentialless üstbilgisi olsa bile <img src="https://images.example.com/avatar.png" crossorigin="use-credentials"> kimlik bilgisi içeren bir istek gönderir.

fetch() API için request.mode = 'cors' kullanılabilir.

COEP: credentialless sağlanmışken COEP: require-corp web sitem için neden hâlâ faydalı?

COEP: require-corp, bazı kaynak dışı alt kaynaklar için çerezlere ihtiyaç duyuluyorsa istek modunu manuel olarak CORS olarak değiştirmenizi gerektirmez.

credentialless ortamında özel başlıklar olmadan çapraz kaynak iframe'leri de yükleyebilir miyim?

Hayır. credentialless ortamı altında kaynaklar arası iframe'ler yüklemek için require-corp ile aynı koşulların sağlanması gerekir. iFrame belgelerinin iki üstbilgiyle sunulması gerekir:

  • Cross-Origin-Embedder-Policy: credentialless (veya require-corp)
  • Cross-Origin-Resource-Policy: cross-origin

İyi bir haberimiz var. İframe'lere crossorigin="anonymous" vererek çapraz kaynak iframe'lerin bu üstbilgi olmadan yüklenmesine izin verilmesiyle ilgili devam eden bir tartışma var. Bu sayede, çapraz kaynak iframe'ler üstbilgi olmadan ancak kimlik bilgileri olmadan yüklenebilir.

Bu özellik diğer tarayıcılar tarafından da kullanılacak mı?

Sıradaki gelişmeler

Çapraz kaynak izolasyonuyla ilgili diğer zorlukları azaltmak için iki ek güncelleme daha sunuyoruz:

Yukarıdaki engeller nedeniyle SharedArrayBuffer değişikliğini uzatmak için Chrome kaynak denemesine kaydolan kullanıcılar, değişikliğin ne zaman sonlandırılacağını merak ediyor olabilir. İlk olarak Chrome 96'da sonlandırılacağını duyurmuştuk ancak bu tarihi Chrome 106'ya ertelemeye karar verdik.

Kaynaklar

Fotoğraf: Martin Adams, Unsplash