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 kökler arası erişimi bu şekilde işaretleyerek etkinleştirebilirsiniz.

Yeni Kaynaklar Arası Yerleştirme Politikası (COEP) değerini kullanıma sunduk credentialless. Bu, tarayıcının kaynaklar arası kaynakları yüklemesine olanak tanır. olmadan istek göndererek, Çapraz Kaynak Politikası'nı (CORP) kullanma kimlik bilgileri (ör. çerezler) kullanma. Bu, geliştiricilerin çapraz kaynak benimsemelerine bu sayede izolasyonu daha kolay hale getirebilirsiniz.

Kökler arası erişime neden ihtiyaç duyuyoruz.

Bazı web API'leri, Spectre. Alıcı: tarayıcılar, Google Analytics 4'te tarama odaklı kaynaklar arası erişime kapalı URL'ler. Çapraz kökenli yalıtılmış durumda, web sayfası aşağıdaki gibi ayrıcalıklı özellikleri kullanabilir: SharedArrayBuffer performance.measureUserAgentSpecificMemory() ve daha iyi çözünürlüklü yüksek hassasiyetli zamanlayıcılar ve etkinleştirmedikleri sürece kaynağı diğer kullanıcılardan ayırır.

Kaynaklar arası izolasyonun etkinleştirilmesi için web sayfasının iki HTTP üstbilgisi göndermesi gerekir:

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

Kökler arası erişime kapalı durumda tüm kökler arası kaynakların sunulması gerekir veya yüklenecek bir Cross-Origin-Resource-Policy başlığı ayarlayın.

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

Kökler arası izolasyon, web sayfalarının güvenliğini artırırken web sayfalarını güçlü özellikleri etkinleştirin. zor olarak nitelendirilir. En büyük zorluklar, tüm çapraz kaynaklar için CORS veya CORP'nin etkinleştirilmesinin kaynaklar. Bu başlıklara sahip olmayan kaynaklar, şurada tarayıcı tarafından yüklenmeyecek: kökler arası erişime kapalı bir sayfadır.

Bu çapraz kökenli kaynaklar, genellikle söz konusu kaynakları kullanan üçüncü taraflar gerekli başlıkların eklenmesi kolay olmayabilir.

Peki kaynağın yüklenmek için yeterince güvenli olduğunu biliyorsak ne olur? Aslında kimlik bilgileri ile talep edilen kaynaklardır. Çünkü bunlar saldırganın kendi hesabına yükleyemeyeceği hassas bilgileri içerme olasılığı bulunan sahip olmalıdır. Bu, kimlik bilgileri olmadan istenebilecek kaynakların herkese açık olduğu anlamına gelir. kullanılabilir ve güvenli bir şekilde yüklenebilir.

credentialless kurtarıldı

İşte COEP: credentialless burada devreye giriyor. credentialless yeni bir değerdir Cross-Origin-Embedder-Policy üstbilgisi için. require-corp gibi, kökler arası izolasyonu etkinleştir, ancak CORP:cross-origin gerektirmek yerine kaynaklar arası istekler olmadan gönderilir. Bunlar, kimlik bilgileri (örneğin, çerezler).

Alternatif olarak şu iki başlığı görüyorsunuz:

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

Bu durumda, istenen çapraz kaynak sunucusu istekte bulunan kişi de her zaman için yanıtın yalnızca hassas bir herkese açık bilgiler içerir.

Bu, aynı zamanda tarayıcı üçüncü taraf çerezlerini kullanımdan kaldırma planına geçin.

Demo

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

SSS

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

Elbette isteğin modunu CORS kontrolü gerektirecek şekilde değiştirmek pahasına. önemli olabilir. <audio>, <img>, <link>, <script> ve ve <video>, bildirmek için crossorigin="use-credentials" açıkça ekleyin kimlik bilgisi içeren istekler göndermek için tarayıcıya.

Örneğin, https://www.example.com üzerindeki bir dokümanda Cross-Origin-Embedder-Policy: credentialless üstbilgisi, <img src="https://images.example.com/avatar.png" crossorigin="use-credentials"> şunu yapacak: kimlik bilgisi içeren bir istek gönderin.

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

COEP: credentialless sağlanıyorsa COEP: require-corp, web sitem için nasıl bir fayda sağlar?

COEP: require-corp, istek modunu manuel olarak Kaynaklar arası bazı alt kaynaklar için çerez gerekiyorsa CORS

Kaynaklar arası iframe'leri, credentialless ortamı altında özel başlıklar olmadan da 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 dokümanlarının iki başlıkla sunulması gerekir:

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

İyi haber ise iframe'lere crossorigin="anonymous" vererek bu başlıklar olmadan kaynaklar arası iframe'lerin yüklenmesine izin verme konusunda devam eden bir tartışma var. Bu, kaynaklar arası iframe'lerin başlık olmadan ancak olmadan yüklenmesine izin verir kimlik bilgileri.

Bu özellik diğer tarayıcılar tarafından da benimsenecek mi?

Sırada ne var?

Konuyla ilgili diğer zorlukları azaltmak amacıyla iki ek güncelleme yapılacak: kökler arası erişime kapalıdır:

Politika ihlali nedeniyle SharedArrayBuffer değişikliğini uzatmak üzere Chrome kaynak denemesine yukarıdaki engeller projenin ne zaman sonlandırılacağını merak ediyor olabilir. Başlangıçta Chrome 96 sürümünde kapatılacağını duyurduk, ancak bunu Chrome 106'ya erteleyin.

Kaynaklar

Fotoğraf: Martin Adams açık Lansmanı kaldır