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.

iFrame kimlik bilgisi yok özelliği Chrome sürüm 110'da varsayılan olarak etkinleştirilir. Cross-Origin-Embedder-Policy (COEP) ile çalışan, COEP'yi ayarlamayan üçüncü taraf iframe'ler yerleştirme ile ilgili en yaygın şikayet geliştiricilerine çözüm.

COEP'ye neden ihtiyaç duyarız?

Bazı web API'leri, Spectre gibi yan kanal saldırıları riskini artırır. Bu riski azaltmak amacıyla tarayıcılar, kaynaklar arası izolasyon adı verilen ve COEP dağıtımı gerektiren isteğe bağlı yalıtılmış bir ortam sunar. Kaynaklar arası izolasyon, web sitelerinin SharedArrayBuffer, performance.measureUserAgentSpecificMemory() ve daha iyi çözünürlüğe sahip yüksek hassasiyetli zamanlayıcılar gibi ayrıcalıklı özellikleri kullanmasına olanak tanır.

Kökler 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

COEP:credentialless, require-corp parametresine alternatif olarak kullanılabilir. Daha fazla ayrıntı için dokümanlara bakın.

COEP'yi etkinleştirmeyle ilgili zorluklar

Kökler arası erişime kapalı web sayfalarının güvenliği ve güçlü özelliklerin etkinleştirilmesi sağlasa da COEP'nin dağıtılması zor olabilir. En büyük zorluklardan biri, tüm kaynaklar arası iframe'lerin COEP ve CORP'yi dağıtması gerektiğidir. Bu başlıkları içermeyen iframe'ler, tarayıcı tarafından yüklenmez.

iFrame kimlik bilgisi yok

COEP'in ayarlanmadığı üçüncü taraf iframe'lerin yerleştirilmesine yardımcı olmak için <iframe credentialless> özelliğini kullanıma sunuyoruz. <iframe> öğesine credentialless özelliği eklendiğinde iframe farklı ve boş bir bağlamdan yüklenir. Özellikle çerezler olmadan yüklenir. Böylece COEP kısıtlamasını kaldırabilirsiniz.

Örnek:

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

Bu iframe, yeni bir geçici bağlamda oluşturulmuştur ve üst düzey web sitesiyle ilişkilendirilmiş çerezlerin hiçbirine erişemez. Bunun yerine boş bir kurabiye kavanozuyla başlar. Benzer şekilde LocalStorage, CacheStorage, IndexedDB ve benzeri depolama API'leri, verileri yeni geçici bölümde yükler ve depolar. Bölüm hem geçerli üst düzey dokümana hem de iframe'in kaynağına ayarlıdır. Üst düzey doküman kaldırıldığında bu depolama alanının tamamı temizlenir.

Kimlik bilgisi olmayan iframe'ler, COEP yerleştirme kurallarına tabi değildir. Bu veriler hâlâ güvendedir: Her seferinde yeni bir boş bağlamdan yüklendiklerinden, kişiselleştirilmiş veriler içermemeleri gerekir. Saldırganlar bunun peşindedir. Bir iframe yalnızca herkese açık veriler içeriyorsa saldırgan için değerli değildir.

Demografi

Kimlik bilgisi içermeyen iframe demosuna göz atabilirsiniz.

SSS

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

<iframe>, <iframe credentialless> kimlik bilgisi içermeyen bir öğenin içine mi yerleştirilmiş?

Evet. Devralınır. Bir iframe'in kimlik bilgisi olmadığında bu, credentialless özelliği olmasa bile alt ağacın tamamındaki tüm iframe'ler için geçerli olur.

<iframe credentialless> kaynağından oluşturulan pop-up'lar da kimlik bilgisi içermez mi?

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

Dokümanın kimlik bilgisi içermeyen bir iframe'e yerleştirilmiş olduğu nasıl anlaşılır?

window.credentialless, kimlik bilgisi içermeyen bir iframe içinde true (doğru), aksi durumda false (yanlış) değerini alır. Değeri, <iframe credentialless> öğesini desteklemeyen bir web tarayıcısında undefined olarak belirlendi.

Kaynaklar