Chrome, kullanıcı gizliliğini güçlendirmek ve yan kanal siteler arası izlemeyle mücadele etmek için artık depolama alanı bölümlendirmesi adı verilen bir işlemle üçüncü taraf bağlamlarındaki depolama ve iletişim API'lerinin çoğunu yalıtıyor.
Uygulama durumu
Bu özellik, Chrome 115 ve sonraki sürümlerde tüm kullanıcılar için etkinleştirildi. Firefox ve Safari gibi diğer büyük tarayıcılarda da benzer depolama alanı bölümlendirme çalışmaları yapılmakta veya planlanmaktadır. GitHub'daki depolama alanı bölümlendirme önerisi hakkında daha fazla tartışma yapılabilir.
Depolama alanı bölümlendirmesi nedir?
Chrome, belirli yan kanal siteler arası izleme türlerini önlemek için depolama ve iletişim API'lerini üçüncü taraf bağlamında bölümlendirir.
Depolama alanı bölümleme olmadan bir site, kullanıcıyı web'de izlemek için farklı sitelerdeki verileri birleştirebilir. Ayrıca, yerleştirilmiş sitenin zamanlama saldırıları, XS-Leaks ve COSI gibi yan kanal tekniklerini kullanarak üst düzey sitedeki kullanıcı hakkında belirli durumları tahmin etmesine olanak tanır.
Geçmişte depolama alanı yalnızca kaynağa göre anahtarlanıyordu. Bu nedenle, example.com alanından bir iFrame a.com ve b.com alanlarına yerleştirilirse depolama alanından bir kimlik depolayıp başarıyla alarak bu iki siteyle ilgili tarama alışkanlıklarınız hakkında bilgi edinebilir. Üçüncü taraf depolama alanı bölümlendirme işlevi etkinleştirildiğinde,
example.com için depolama alanı iki farklı bölümde bulunur. Bunlardan biri a.com, diğeri ise b.com içindir.
Genel olarak, bölümleme, bir iframe içinde Local Storage ve IndexedDB gibi depolama API'leri tarafından yazılan verilere artık aynı kaynağı paylaşan tüm bağlamlar tarafından erişilemeyeceği anlamına gelir. Bunun yerine, bu veriler artık yalıtılmış durumda ve yalnızca aynı kaynağı ve aynı üst düzey siteyi paylaşan bağlamlarda kullanılabilir.
Zincirleme iframe'lerde depolama alanı bölümlendirmesi
iFrame'ler iç içe yerleştirildiğinde, özellikle de aynı kaynak zincir içinde birden çok kez göründüğünde depolama bölümlemenin karmaşıklığı önemli ölçüde artar.
Örneğin, A1, B için bir iFrame içeriyor. B ise A2 için bir iFrame içeriyor ve hem A1 hem de A2 aynı sitede bulunuyor. Yalnızca üst düzey site ve mevcut çerçevenin kaynağı bölümlendirme için dikkate alınırsa aradaki alanlar arası iframe B'ye rağmen, iframe A2 üst düzey siteyle (A1) aynı siteyi paylaştığı için yanlışlıkla "birinci taraf" olarak değerlendirilebilir. Bu durum, A2'nin varsayılan olarak bölüm oluşturulmamış depolama alanına erişimi olması halinde A2'yi tıklama hırsızlığı gibi güvenlik risklerine açık hale getirebilir.
Chrome, bu sorunu çözmek için depolama bölümü anahtarına "üst bit" ekler. Bu bit, mevcut iFrame ile üst düzey site arasındaki herhangi bir doküman farklı bir kaynaktan (siteler arası) geliyorsa ayarlanır. Bu durumda, B sitesi siteler arası olduğundan bit A2 için ayarlanır ve depolama alanı A1'den ayrılır.
Iframe zinciri yalnızca aynı site bağlamlarından oluştuğunda (örneğin, A1 sitesi A2'yi, A2 ise A3'ü içerdiğinde) üst öğe biti depolama alanlarını daha fazla bölmez. Bu gibi durumlarda depolama alanları, ortak kaynakları ve üst düzey siteleriyle anahtarlanarak paylaşılmaya devam eder.
Zincirleme iFrame'lerde bölümlendirilmemiş erişime ihtiyaç duyan siteler için Chrome, bu kullanım alanını etkinleştirmek üzere Storage Access API'yi genişletme denemeleri yapıyor. Storage Access API, çerçeveli sitenin API'yi açıkça çağırmasını gerektirdiğinden tıklama korsanlığı riski azaltılır.
Bölümleme nedeniyle API'de yapılan değişiklikler
Bölümlemeden etkilenen API'ler aşağıdaki gruplara ayrılabilir:
Depolama API'leri
- Kota sistemi
- Depolama için ne kadar disk alanı ayrılacağını belirlemek üzere kota sistemi kullanılır. Kota sistemi, izin verilen alanı ve bu alanın ne zaman temizleneceğini belirlemek için her bölümü ayrı bir paket olarak yönetir.
navigator.storage.estimate()yöntemi artık depolama bölümüne özel bilgiler sağlıyor.window.webkitStorageInfovenavigator.webkitTemporaryStoragegibi yalnızca Chrome'a özel API'ler kullanımdan kaldırıldı.- IndexedDB ve önbellek depolama alanı bölümlenmiş kota sistemini kullanır.
- Web Storage API
- Web Storage API, tarayıcıların anahtar/değer çiftlerini depolayabileceği mekanizmalar sağlar. İki mekanizma vardır: Yerel Depolama ve Oturum Depolaması. Bunlar kota ile yönetilmez ancak yine de bölümlere ayrılır.
- Origin Private File System
- File System Access API, kullanıcının erişim izni vermesinden sonra sitenin değişiklikleri doğrudan cihazdaki dosya ve klasörlere okumasına veya kaydetmesine olanak tanır. Origin Private File System, bir kaynağın özel içeriği doğrudan diske depolamasını sağlar. Bu içerik, kullanıcılar tarafından erişilebilir olmaya devam eder ancak artık bölümlere ayrılmıştır.
- Storage Bucket API
- Storage Bucket API, paket adı verilen yeni bir kavram kullanarak IndexedDB ve localStorage gibi çeşitli depolama API'lerini birleştiren Storage Standard için geliştirilmektedir. Paketlerde depolanan veriler ve paketlerle ilişkili meta veriler bölümlenir.
- Clear-Site-Data üstbilgisi
- Yanıtın
Clear-Site-Databaşlığını içermesi, sunucunun kullanıcının tarayıcısında depolanan verilerin temizlenmesini istemesine olanak tanır. Önbellek, çerezler ve DOM depolama alanı temizlenebilir. Başlığı kullanmak yalnızca bir bölümdeki depolama alanını temizler.
- Blob URL deposu
- Blob URL'si, ham verileri tutan bir nesne olan blob'a erişim sağlar. Depolama bölümlendirmesi olmadan, bir sitedeki üçüncü taraf iFrame'inde oluşturulan bir blob URL'si, başka bir siteye yerleştirilmiş aynı kaynaklı bir iFrame'de kullanılabilir. Örneğin, hem
a.comhem deb.comalanınaexample.comiFrame yerleştirilmişsea.comalanına yerleştirilmiş iFrame'de oluşturulan bir blob URL'si, herhangi bir kısıtlama olmadanb.comalanına yerleştirilmiş iFrame'e aktarılabilir ve bu iFrame tarafından kullanılabilir. Chrome 137'den (27 Mayıs 2025'te yayınlandı) itibaren Blob URL'leri, üst düzey gezinmeler hariç tüm kullanımlar için bölümlendirilir. Artık engellenecek durumlar arasında, bölümler arası blob URL'lerininfetch()ile veya çeşitli HTML öğeleri içinsrcözellik değeri olarak kullanılması yer alıyor. Blob URL'lerine yönelikwindow.open()çağırma veyatarget='_blank'ile bağlantıyı tıklama gibi üst düzey gezinmeler, bölümler arasıysa engellenmez ancak blob URL'si sitesi, gezinmeyi başlatan sayfanın üst düzey sitesinden farklıysanoopeneruygulanır.noopener'nın zorunlu kılınması, gezinmeyi başlatan dokümanın, açtığı blob URL'si dokümanı için pencere tutacağı almasını engeller. Önceki örnekte bölümlendirme,b.comüzerindeki iFrame'in blob URL'sinin içeriğini getirmesini engeller ancak yine dewindow.open()yapabilir.
İletişim API'leri
Depolama API'lerinin yanı sıra bir bağlamın kaynak sınırları arasında iletişim kurmasına olanak tanıyan iletişim API'leri de bölümlendirilir. Değişiklikler, yayın veya aynı kaynaklı buluşma yoluyla diğer bağlamların keşfedilmesine olanak tanıyan API'leri etkiler.
Bölümlendirme nedeniyle aşağıdaki iletişim API'leri, üçüncü taraf iFrame'lerin aynı kaynaklı bağlamlarıyla veri alışverişinde bulunmasını engeller:
- Yayın Kanalı
- Broadcast Channel API, aynı kaynaklı göz atma bağlamları (pencereler, sekmeler veya iframe'ler) ve çalışanlar arasında iletişime olanak tanır.
- Bu bağlamlar arasındaki ilişki zaten net bir şekilde tanımlandığından, siteler arası iframe
postMessage()davranışının değiştirilmesi önerilmez.
- SharedWorker
- SharedWorker API, aynı kaynaklı göz atma bağlamlarında erişilebilen bir çalışan sağlar.
- Web Locks
- Web Locks API, aynı kaynaktaki bir sekmede veya çalışanda çalışan kodun, bazı işlemler gerçekleştirilirken paylaşılan bir kaynak için kilit edinmesine olanak tanır.
Service Worker API
Service Worker API, sitelerin arka planda görev gerçekleştirmesine olanak tanır. Sites, etkinliklere yanıt vermek için yeni çalışan bağlamları oluşturan hizmet çalışanlarını kaydeder. Geleneksel olarak bu çalışanlar, aynı kaynaklı herhangi bir bağlamla iletişim kurabiliyordu. Ancak servis çalışanları, gezinme isteklerinin zamanlamasını değiştirebildiğinden geçmişi koklama gibi siteler arası bilgi sızıntısı riski oluştururlar.
Bu nedenle, üçüncü taraf bağlamından kaydedilen hizmet çalışanları artık bölümlere ayrılıyor.
Uzantı API'leri
Uzantılar, kullanıcıların göz atma deneyimlerini özelleştirmelerine olanak tanıyan programlardır.
Uzantı sayfaları (chrome-extension:// şemasına sahip sayfalar) web'deki sitelere yerleştirilebilir. Bu senaryoda, uzantı sayfaları üst düzey bölümlerine erişmeye devam eder.
Uzantılar diğer siteleri de yerleştirebilir. Bu durumda, uzantının yerleştirilen siteler için ana makine izinleri varsa bu siteler üst düzey bölümlerine erişir.
Daha fazla bilgi için uzantı belgelerine bakın.
Demo: Depolama alanı bölümlendirmesini test etme
Demo sitesi: https://storage-partitioning-demo-site-a.glitch.me/
Demoda iki site kullanılmaktadır: A sitesi ve B sitesi.
- En üst düzey bağlamda A sitesini ziyaret ettiğinizde çeşitli depolama yöntemlerini kullanarak veriler ayarlanır.
- B sitesi, A sitesinden bir sayfa yerleştiriyor ve bu yerleştirme, daha önce ayarlanan depolama seçeneklerini okumaya çalışıyor.
- A sitesi B sitesine yerleştirildiğinde, depolama alanı bölümlendiği için bu verilere erişemez ve okuma işlemi başarısız olur.
- Demoda, verilerin bölümlendirilip bölümlendirilmediğini göstermek için her okuma işleminin başarılı veya başarısız olması kullanılır.
Şimdilik --disable-features=ThirdPartyStoragePartitioning komut satırı anahtarını kullanarak Chrome'da depolama bölümlemeyi devre dışı bırakabilirsiniz. Not: Bu komut satırı anahtarı geliştirme ve test amaçlıdır ve gelecekteki Chrome sürümlerinde kaldırılabilir veya değiştirilebilir.
Bölümlendirme durumlarını görmek için diğer tarayıcıları da aynı şekilde test edebilirsiniz.
Ek taşıma süresi isteme
Bağımlılıklarını taşımak için ek süreye ihtiyaç duyan siteler için DisableThirdPartyStoragePartitioning3 sonlanan özellik denemesi artık uzatıldı. Bu deneme, üst düzey sitelerin sayfalarına yerleştirilmiş üçüncü taraf bağlamları için bölümlendirilmemiş depolama alanı, service worker'lar ve iletişim API'leri kullanmasına olanak tanıyan geçici bir mekanizma sunar.
Daha fazla bilgi edinmek için Depolama alanı bölümlendirmesi desteği sonlandırma denemesi yenileme başlıklı makaleyi inceleyin.
Etkileşim kurma ve geri bildirim paylaşma
- GitHub: Orijinal öneriyi okuyun, sorularınızı sorun ve tartışmaya katılın.
- Hata bildirme: Bir şeyin beklendiği gibi çalışmadığını düşünüyorsanız Chromium izleyicisinde hata bildiriminde bulunun.