Güçlü özellikler için neden "köşeler arası erişime kapalı" olması gerekir?

SharedArrayBuffer, performance.measureUserAgentSpecificMemory() ve yüksek çözünürlüklü zamanlayıcı gibi güçlü özellikleri daha yüksek hassasiyetle kullanmak için kökler arası erişime kapalı web sitelerinin neden gerekli olduğunu öğrenin.

Giriş

Web sitenizi "kökler arası erişime kapalı" yapma konusunda COOP ile COEP'le birlikte "çapraz kaynak"ın benimsenmesini izole" durumu COOP ve COEP kullanarak oluşturabilirsiniz. Bu makale, Yeşil Ofis'in Tarayıcıda güçlü özellikleri etkinleştirmek için çapraz kaynak izolasyonunun neden gerekli olduğu.

Arka plan

Web, aynı kaynak temelinde kurulmuştur politika: kullanıcıların uygulamanızı veya oyununuzu Dokümanlar ve komut dosyalarının başka bir kaynaktaki kaynaklarla nasıl etkileşim kurduğunu gösterir. Bu ilkesi, web sitelerinin kaynaklar arası kaynaklara erişim yollarını kısıtlar. Örneğin, örneğin, https://a.example sitesindeki bir dokümanın verilere erişmesi engellendi https://b.example adresinde barındırılıyor.

Ancak, aynı kaynak politikasında geçmişteki bazı istisnalar söz konusudur. Her web sitesi:

  • Kaynaklar arası iframe'leri yerleştirme
  • Resimler veya komut dosyaları gibi çapraz kaynak kaynakları dahil et
  • DOM referansıyla kaynaklar arası pop-up pencereleri aç

Web sıfırdan tasarlanabilseydi, bu istisnalar mevcut olmazdı. Ne yazık ki, web topluluğu bir kampanyanın temel avantajlarını aynı kaynak politikasına tabiyseniz web zaten bu istisnalara güveniyordu.

Böyle bir lax aynı kaynaklı politikanın güvenlikle ilgili yan etkileri iki yolları. Bunun bir yolu, Cross Ads Programı'nın Kaynak Kaynak Paylaşımı (CORS) Amacı, sunucunun başka bir kullanıcıyla kaynak paylaşımına izin kaynak gösterilir. Diğer bir yol da kaynaklar arasında geçiş yaparak geriye dönük uyumluluğu korumanıza yardımcı olabilir. Böyle kökler arası kaynaklara "opak" denir kaynaklar. Örneğin, müşterilere Bir çapraz kaynak resmin piksellerini CanvasRenderingContext2D aracılığıyla değiştirme resme CORS uygulanmadığı sürece başarısız olur.

Tüm bu politika kararları, içeriklere göz atan bir bağlam grubu içinde gerçekleşir.

Tarama Bağlam Grubu

Uzun bir süre boyunca, CORS ile opak kaynakların birlikte kullanımı, güvenli değildir. Bazen uç durumlar (ör. JSON) güvenlik açıkları) tespit edildi ve yama uygulanması gerekti, ancak genel olarak kaynaklar arası kaynakların ham baytlarına doğrudan okuma erişimi sağlamak, işidir.

Tüm bu değişiklikler Spectre, kodunuzla aynı tarama içerik grubuna yüklenen veriler oluşturur somut olarak ortaya koyar. Saldırganlar, belirli işlemlerin süresini ölçerek CPU önbelleklerinin içeriğini ve bu bilgiler aracılığıyla işlem' hafızada bulabilirsiniz. Bu tür zamanlama saldırıları, düşük ayrıntı düzeyine sahip zamanlayıcılarla mümkündür yüksek ayrıntı düzeyine sahip zamanlayıcılarla hızlandırılabilen hem açık (performance.now() gibi) hem de kapalı (ör. SharedArrayBuffer sn.) evil.com, kaynaklar arası resim yerleştirirse Hayalet saldırısı, piksel verilerini okur. Bu da korumaların "opaklık" etkisiz.

Spektr

İdeal olarak, tüm kaynaklar arası istekler sunucu tarafından açıkça incelenmelidir. sahip olan kişidir. İnceleme süreci Google tarafından bir kaynak sahibi sunucuyu devre dışı bırakırsanız veriler hiçbir zaman içerik grubu oluşturur ve dolayısıyla hiçbir Spectre'ın erişemeyeceği bir yerde saldırıya uğrayan çeşitli yöntemlerdir. Kökler arası izole bir eyalet diyoruz. COOP+COEP tam olarak bu anlama geliyor.

Kökler arası erişime kapalı bir durumda, istekte bulunan site daha az olarak değerlendirilir Bu da SharedArrayBuffer gibi güçlü özelliklerin kilidini açar. performance.measureUserAgentSpecificMemory() ve yüksek çözünürlük daha iyi doğrulukta zamanlayıcılar kullanabilirsiniz. Spectre benzeri saldırılar için kullanılamaz. Aynı zamanda, document.domain

Çapraz Kaynak Yerleştirme Politikası

Çapraz Kaynak Yerleştirme Aracı Politika (COEP), açıkça izin verilmeyen kaynaklar arası kaynakların yüklenmesini (CORP veya CORS kullanarak). Bu özellik ile beyanların bir dokümanın bu tür kaynakları yükleyememesi.

COEP nasıl çalışır?

Bu politikayı etkinleştirmek için aşağıdaki HTTP başlığını dokümana ekleyin:

Cross-Origin-Embedder-Policy: require-corp

require-corp anahtar kelimesi, COEP için kabul edilen tek değerdir. Bu, dokümanın yalnızca aynı kaynaktan kaynaklar yükleyebileceğini belirtmelidir. açıkça başka bir kaynaktan yüklenebilir olarak işaretlenen kaynaklar.

Kaynakların başka bir kaynaktan yüklenebilmeleri için Kaynaklar Arası Kaynak Paylaşımı (CORS) veya Kaynaklar Arası Kaynak Politikası (CORP).

Kaynaklar Arası Kaynak Paylaşımı

Kaynaklar arası kaynak, Kaynaklar Arası Kaynak Paylaşımı'nı destekliyorsa (CORS) için crossorigin özelliğinin kullanarak web sayfanıza ekleyebilirsiniz.

<img src="https://third-party.example.com/image.jpg" crossorigin>

Örneğin, bu resim kaynağı CORS başlıklarıyla sunuluyorsa crossorigin özelliği ile birlikte kaynağı getirme isteği CORS'yi kullanır. mod'u tıklayın. Bu ayrıca CORS üstbilgilerini ayarlamadığı sürece resmin yüklenmesini engeller.

Benzer şekilde, çapraz kaynak verileri fetch() yöntemini kullanarak alabilirsiniz. sunucu doğru şekilde yanıt verdiği sürece özel bir işlem gerektirmez. HTTP başlıklar ekleyin.

Kaynaklar Arası Kaynak Politikası

Kaynaklar Arası Kaynak Politikası (CORP) ilk başta, kaynaklarınızın herhangi bir şekilde başka bir kaynak tarafından yüklendi. COEP bağlamında CORP, kaynağı belirtebilir sahibinin politikasını belirler.

Cross-Origin-Resource-Policy başlığı üç olası değer alır:

Cross-Origin-Resource-Policy: same-site

same-site işaretli kaynaklar yalnızca aynı siteden yüklenebilir.

Cross-Origin-Resource-Policy: same-origin

same-origin işaretli kaynaklar yalnızca aynı kaynaktan yüklenebilir.

Cross-Origin-Resource-Policy: cross-origin

cross-origin işaretli kaynaklar herhangi bir web sitesi tarafından yüklenebilir. (Bu değer anahtar kelimesi CORP spesifikasyonuna ilişkin bilgiler sağlar.)

Çapraz Kaynak Açıcı Politikası

Kaynaklar Arası Açıcı Politikası (COOP), diğer dokümanlardan ayrılması için, üst düzey bir pencerenin diğer dokümanlardan izole edilmesini ve ile doğrudan etkileşimde bulunamamaları için farklı göz atma bağlam grupları üst düzey pencereden. Örneğin, COOP içeren bir dokümanda pop-up açıldığında window.opener özelliği null olacak. Ayrıca, .closed açılış öğesinin buna referansı true sonucunu döndürür.

COOP

Cross-Origin-Opener-Policy başlığı üç olası değer alır:

Cross-Origin-Opener-Policy: same-origin

same-origin olarak işaretlenen dokümanlar aynı tarama bağlamını paylaşabilir grubu aynı kaynak dokümanlara sahip olan ve same-origin açık şekilde işaretlenmiş olan bir grup için de kullanılabilir.

COOP

Cross-Origin-Opener-Policy: same-origin-allow-popups

same-origin-allow-popups içeren üst düzey bir doküman, pop-up'larının gösterilmesini engelleyebilir. unsafe-none tutarında bir COOP ayarlanıyor.

COOP

Cross-Origin-Opener-Policy: unsafe-none

unsafe-none, varsayılandır ve dokümanın, açan kişinin sayfasına eklenmesine izin verir. göz atma bağlam grubu (COOP değeri same-origin değilse).

Özet

SharedArrayBuffer gibi güçlü özelliklere garantili erişim istiyorsanız, performance.measureUserAgentSpecificMemory() veya yüksek çözünürlük daha yüksek hassasiyetli zamanlayıcılar olduğundan emin olun. dokümanınızın hem require-corp değerine sahip COEP hem de same-origin değerine sahip COOP. Bunlardan biri yoksa tarayıcı bu güçlü özellikleri güvenli bir şekilde etkinleştirmek için yeterli izolasyonu garanti etmez. Siz kontrol ederek sayfanızın durumunu belirleyebilir. self.crossOriginIsolated true değerini döndürür.

Bunu uygulama adımlarını Web sitenizi "çapraz kaynak" olarak ayarlama izole" COOP ve COEP kullanarak test edilir.

Kaynaklar