COEP kullanan geliştiriciler artık COEP kullanmayan üçüncü taraf iFrame'leri yerleştirebilir.
COEP'ye neden ihtiyacımız var?
Bazı web API'leri, Spectre gibi yan kanal saldırısı riskini artırır. Bu riski azaltmak için tarayıcılar, kökler arası erişime kapalı olarak adlandırılan ve etkinleştirmeye dayalı bir izole ortam sunar. Bu ortam, diğerlerinin yanı sıra COEP'nin dağıtılmasını gerektirir. Bu sayede web siteleri SharedArrayBuffer
, performance.measureUserAgentSpecificMemory()
ve daha yüksek çözünürlüklü yüksek hassasiyetli zamanlayıcılar gibi ayrıcalıklı özellikleri kullanabilir.
Kaynaklar arası izolasyonu etkinleştirmek için web sitelerinin aşağıdaki iki HTTP üst bilgisini göndermesi gerekir:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
COEP'yi etkinleştirmeyle ilgili sorunlar
Kökler arası erişime kapalı web siteleri, web sayfalarına daha iyi güvenlik ve güçlü özellikleri etkinleştirme olanağı sunsa da COEP'yi dağıtmak zor olabilir. En büyük zorluklardan biri, tüm çapraz kaynak iframe'lerin aynı zamanda COEP ve CORP dağıtması gerekmesidir. Bu başlığa sahip olmayan iframe'ler tarayıcı tarafından yüklenmez.
Iframe'ler genellikle COEP'yi dağıtması kolay olmayabilecek bir üçüncü taraf tarafından yayınlanır.
Anonim iFrame'in yardımı
İşte bu noktada anonim iFrame devreye girer. anonymous
özelliği <iframe>
öğesine eklendiğinde, iframe farklı ve geçici bir depolama alanından yüklenir ve artık COEP kısıtlamalarına tabi olmaz.
Örnek:
<iframe anonymous src="https://example.com">
Iframe, yeni bir geçici bağlamda oluşturulur ve üst düzey web sitesiyle ilişkili çerezlerin hiçbirine erişemez. Boş bir çerez
kavanozundan başlar. Benzer şekilde, LocalStorage
, CacheStorage
, IndexedDB
vb. depolama API'leri verileri yeni geçici bölüme yüklüyor ve depoluyor. Bölüm, iFrame'in mevcut üst düzey dokümanı ve kaynağına göre kapsamlandırılır. Üst düzey belge yüklendikten sonra depolama alanı temizlenir.
Anonim iframe'ler COEP yerleşimi kurallarına tabi değildir. Bu yöntem yine de güvenlidir, çünkü her seferinde yeni bir boş bağlamdan yüklenir. Bu reklamlar, verileri kişiselleştirilmeden yüklenir. Bu raporlar yalnızca herkese açık veriler içerir ve saldırganlar için değerli değildir.
Demo
Anonim bir iFrame'i https://anonymous-iframe.glitch.me/ adresinden kontrol edebilirsiniz.
Kaynak denemesine kaydolma
Anonim iframe'lerin geliştiricilerin kaynakta yalıtımı benimsemesine yardımcı olmasını sağlamak için bunları Chrome'un 106 ile 108 arasındaki sürümlerinde kaynak denemesi olarak kullanıma sunuyoruz.
Web sitenizde Anonim iframe'leri kullanabilmek için kaynak denemesine kaydolun:
- Kaynağınız için jeton isteyin.
- Jetonu aşağıdaki yöntemlerden biriyle kullanın:
- HTML'nizde:
html <meta http-equiv="Origin-Trial" content="TOKEN_GOES_HERE">
- JavaScript'inizde:
js const meta = document.createElement('meta'); meta.httpEquiv = 'Origin-Trial'; meta.content = 'TOKEN_GOES_HERE'; document.head.append(meta);
- HTTP başlıklarında:
text Origin-Trial: TOKEN_GOES_HERE
- HTML'nizde:
- Sayfanıza anonim bir iframe ekleyin:
html <iframe anonymous src="https://example.com">
Bu özellikle ilgili geri bildiriminiz varsa GitHub veri havuzunda sorun bildirin.
Üçüncü taraf kaynak denemesi
Kaynak denemesi, üçüncü taraf komut dosyalarında da kullanılabilir. Bu, sayfaya yerleştirilmiş komut dosyaları tarafından etkinleştirilebileceği anlamına gelir.
Üçüncü taraf kaynak deneme sürümüne kaydolma hakkında daha fazla bilgi edinin.
SSS
Bu özellik diğer tarayıcılar tarafından da benimsenecek mi?
- Mozilla'nın pozisyon isteği: Beklemede
- Webkit'in konum isteği: Sinyal yok
- W3C TAG Konum isteği: tatmin edildi
<iframe anonymous>
içine iç içe yerleştirilmiş iframe'ler anonim midir?
Evet. Devralındı. iFrame anonim hale getirildiğinde, anonymous
özelliği olmasa bile alt ağacın tamamındaki tüm iframe'ler için geçerli olur.
<iframe anonymous>
tarafından oluşturulan pop-up'lar da anonim mi?
Pop-up'lar noopener
ayarlanmış gibi açılır. Bunlar yeni bir normal üst düzey bağlamda oluşturulur ve anonim değildir. Anonim iFrame ile iletişim kuramaz.
Kaynaklar
- COOP ve COEP'yi kullanarak web sitenizi "kaynaklar arası izole" hale getirme
- Güçlü özellikler için "kökler arası erişime kapalı" özelliğine neden ihtiyacınız var?
- Kaynaklar arası izolasyonu etkinleştirme rehberi
- Android Chrome 88 ve Masaüstü Chrome 92'de SharedArrayBuffer güncellemeleri
COEP: credentialless
kullanarak kaynakta farklı kaynaklara ait kaynakları CORP üstbilgileri olmadan yükleme