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ılarının riskini artırır. Bu riski azaltmak için tarayıcılar, kökler arası erişime kapalı adlı 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 başlığını 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, kaynak farklı olan tüm iFrame'lerin COEP ve CORP'u da dağıtması gerektiğidir. Bu üstbilgilerin bulunmadığı 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ölme, mevcut üst düzey doküman ve iFrame'in 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. Ancak her seferinde yeni bir boş bağlamda yüklendikleri için bu işlem güvenlidir. 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 sitenizin anonim iFrame'leri kullanabilmesi 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ştirilen 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 kullanılacak mı?
- Mozilla'nın pozisyon isteği: Beklemede
- Webkit'in konum isteği: Sinyal yok
- W3C TAG Konum isteği: satisfied
<iframe anonymous>
içine yerleştirilmiş iframe'ler anonim mi?
Evet. Bu değer devralınır. Bir iframe anonimleştirildikten sonra, anonymous
özelliği olmasa bile tüm alt ağaçtaki 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 kılavuzu
- 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