Zamanlayıcıları çapraz kaynak yalıtım kısıtlamalarıyla uyumlu hale getirme

Sürüm 91'den önce, Chrome'daki zamanlayıcı çözünürlükleri, site izolasyonunun etkin olduğu masaüstü cihazlarda 5 mikrosaniyeyle, Android'de ise etkin olmadığı yerlerde 100 mikrosaniyeyle sınırlandırılmıştı.

Bir spesifikasyon değişikliğinin ardından Chrome, sürüm 91'den itibaren açık zamanlayıcıların (performance.now(), performance.timeOrigin ve DOMHighResTimestamps öğesini açığa çıkaran diğer performans API'lerinin) çözünürlüğünü platformlar genelinde 100 mikrosaniye ile kısıtlayacaktır. Web siteleri, kaynaklar arası erişime kapalı özelliğini etkinleştirerek platformdan bağımsız olarak kısıtlamayı 5 mikrosaniyeye kadar gevşetebilir.

Kökler arası erişime kapalı web sitesini etkinleştirerek daha güçlü özellikler elde etmek, SharedArrayBuffer ürününde sunulan benzer bir yaklaşımdır. Kaynaklar arası izolasyon, bir web sayfasının etkin olan kaynaklar dışındaki diğer kaynaklardan izole edildiği bir durumdur.

Bu konuda bir şey yapmam gerekiyor mu?

Muhtemelen karşılaşmazsınız. performance.now(), diğer tarayıcılarda çok daha genel çözünürlüklerle sınırlandırılmıştır (örneğin, 1 milisaniye = 0,001 saniye). Bu nedenle, zaten mevcut çözünürlüğü esas almamanız gerekiyordu.

Aynı zamanda, zamanlayıcılarınız için daha yüksek çözünürlükten yararlanmak isterseniz (örneğin daha doğru performans ölçümleri için) sitenizin kökler arası erişime kapalı olduğundan emin olmanız gerekir. Bu şekilde, hem Chrome'da hem de Firefox'un yanı sıra diğer Chromium tabanlı tarayıcılarda daha iyi çözünürlükler sunulur.

Zamanlayıcıların çapraz kaynak izolasyonu ile ilgisi nedir?

Tarayıcı tedarikçileri, Spectre keşfedildiğinde zamanlayıcıları daha genel çözünürlüklerle (ve örtülü zamanlayıcı olarak kullanılabilen SharedArrayBuffers'ın kullanılabilirliğini) sınırlamaya karar verdi. Bunun nedeni, Spectre'ın ve benzer spekülatif yürütme saldırılarının, belirli işlemlerin süresini ölçmek için zamanlayıcılardan yararlanması ve ardından işlemin belleğinin içeriğini tahmin etmesidir.

Tahmine dayalı yürütme saldırıları yaklaşık zamanlayıcılarla yürütülebilir ancak yüksek çözünürlüklü zamanlayıcılar bunları hızlandırabilir. Chrome, riski azaltmak ve bu işlevleri yeniden etkinleştirmek için site izolasyonu mimarisinin yanı sıra diğer mekanizmaları da kullandı ancak yalnızca masaüstü platformları ve Chromium tarayıcıları ile sınırlıdır. Temel tarayıcı mimarisini temel alan API'lere sahip olmak ideal bir yöntem değildir.

Kaynaklar arası izolasyon, tarayıcıların sayfaları izole bir ortamda çalıştırmaları için standart referans sağlar. Bu temel çizgi, isteksiz kaynaklar arası kaynakları yükleyemeyecek, dolayısıyla Spectre açısından risk teşkil etmez. Kökler arası izolasyon sayesinde artık sayfaların, rastgele kaynaklar arası verileri okuyabilen işlemlerde açığa çıkarması güvenli olmayan yüksek çözünürlüklü zamanlayıcılara (SharedArrayBuffer) ve diğer API'lere erişmesine izin verebiliyoruz.

Bu değişikliğin arka planıyla ilgili daha fazla bilgi edinmek için Güçlü özellikler için neden "kaynaklar arası erişime" ihtiyacınız var? başlıklı makaleyi okuyun.

Kapak fotoğrafı, Unsplash'ta Linda Perez Johannessen tarafından yayınlandı.