iFrame kimlik bilgisi yok: iframe'leri COEP ortamlarına kolayca yerleştirin

Arthur Sonzogni
Arthur Sonzogni

COEP kullanan geliştiriciler artık COEP kullanmayan üçüncü taraf iFrame'leri yerleştirebilir.

Kimlik bilgisi gerektirmeyen iframe, Chrome 110 sürümünden itibaren varsayılan olarak etkindir. Cross-Origin-Embedder-Policy (COEP) ile çalışan geliştiricilerin en yaygın şikayetini çözer: COEP'yi ayarlamayan üçüncü taraf iFrame'leri yerleştirme.

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, COEP'nin dağıtılmasını gerektiren kökler arası erişime kapalı adlı etkinleştirmeye dayalı bir izole ortam sunar. Kaynaklar arası izolasyon, web sitelerinin SharedArrayBuffer, performance.measureUserAgentSpecificMemory() ve daha iyi çözünürlükte yüksek hassasiyetli zamanlayıcılar gibi ayrıcalıklı özellikleri kullanmasına olanak tanır.

Kaynaklar arası izolasyonu etkinleştirmek için web sitelerinin aşağıdaki HTTP üstbilgilerini göndermesi gerekir:

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

require-corp'ye alternatif olarak COEP:credentialless de kullanılabilir. Daha fazla ayrıntı için dokümanları inceleyin.

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 kaynak dışı iframe'lerin COEP ve CORP'u dağıtması gerektiğidir. Bu üstbilgilerin bulunmadığı iframe'ler tarayıcı tarafından yüklenmez.

Kimlik bilgisi gerektirmeyen iframe'ler kurtarıcınız

COEP ayarını yapmayan üçüncü taraf iFrame'leri yerleştirmenize yardımcı olmak için <iframe credentialless> özelliğini kullanıma sunuyoruz. credentialless özelliği <iframe> öğesine eklendiğinde, iFrame farklı ve boş bir bağlamda yüklenir. Özellikle çerez olmadan yüklenir. Bu sayede COEP kısıtlaması kaldırılabilir.

Örnek:

<iframe credentialless src="https://example.com">

Bu iFrame, yeni bir geçici bağlamda oluşturulur ve üst düzey web sitesiyle ilişkili çerezlerden hiçbirine erişemez. Bunun yerine, boş bir çerez kavanozu ile başlar. Benzer şekilde, LocalStorage, CacheStorage, IndexedDB gibi depolama API'leri verileri yeni geçici bölüme yükler ve depolar. Bölünme, hem mevcut üst düzey doküman hem de iFrame'in kaynağına göre kapsamlandırılır. Üst düzey doküman yüklendikten sonra bu depolama alanının tamamı temizlenir.

Kimlik bilgisi içermeyen iframe'ler, COEP yerleşimi kurallarına tabi değildir. Bu veriler yine de güvenlidir: Her seferinde yeni ve boş bir bağlamdan yüklendikleri için saldırganların aradığı kişiselleştirilmiş verileri içermezler. Bir iframe yalnızca herkese açık veriler içeriyorsa saldırgan için değerli değildir.

Demo

Kimlik bilgisi içermeyen bir iframe'in demosunu inceleyebilirsiniz.

SSS

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

<iframe>, <iframe credentialless> içinde yer alıyor mu?

Evet. Bu değer devralınır. Bir iframe kimlik bilgisi olmadan oluşturulduktan sonra, credentialless özelliği olmasa bile tüm alt ağaçtaki tüm iframe'ler için geçerli olur.

<iframe credentialless> üzerinden oluşturulan pop-up'lar da kimlik bilgisi olmadan mı oluşturuluyor?

Pop-up'lar noopener ayarlanmış gibi açılır. Bunlar yeni bir normal üst düzey bağlamda oluşturulur ve kimlik bilgisi içermez. Kimlik bilgisi içermeyen iframe ile iletişim kuramaz.

Dokümanın kimlik bilgisi içermeyen bir iFrame'e yerleştirilip yerleştirilmediğini nasıl anlarım?

window.credentialless, kimlik bilgisi içermeyen bir iframe içinde doğru, aksi takdirde yanlış değerini alır. <iframe credentialless> özelliğini desteklemeyen bir web tarayıcısında değeri undefined olur.

Kaynaklar