Bağımsız Bölümlendirilmiş Duruma sahip Çerezler (CHIPS)

Geliştiricilerin bir çerezi, her üst düzey site için ayrı bir çerez bölmesi ile "bölümlendirilmiş" depolama alanına dahil etmesine izin verin.

Uygulama durumu

Tarayıcı Desteği

  • 114
  • 114
  • x
  • x

Kaynak

CHIPS nedir?

Bağımsız Bölümlendirilmiş Duruma (CHIPS) sahip Çerezler, geliştiricilerin bir çerezi bölümlendirilmiş depolama alanına dahil etmesine olanak tanır. Üst düzey site başına ayrı çerez kutuları, kullanıcı gizliliğini ve güvenliğini artırır.

Bölümlendirme olmadan, üçüncü taraf çerezleri, hizmetlerin pek çok alakasız üst düzey siteden kullanıcıları izlemesini ve bilgilerini birleştirmesini sağlayabilir. Bu, siteler arası izleme olarak bilinir.

Tarayıcılar, bölümlendirilmemiş üçüncü taraf çerezlerini aşamalı olarak kullanımdan kaldırıyor. Bu nedenle, üçüncü taraf çerezleri engellendiğinde iframe'ler gibi siteler arası bağlamlardan gelen çerezleri okumanın ve yazmanın tek yolu CHIPS, Storage Access API ve İlgili Web Sitesi Grupları olacaktır.

Yemek tariflerinin iki farklı web sitesi arasında nasıl paylaşılabileceğini gösteren şema.
Çerez bölümlendirmesi kullanılmadığında, bir üçüncü taraf hizmeti üst düzey bir siteye yerleştirildiğinde çerez ayarlayabilir ve diğer üst düzey sitelere yerleştirildiğinde aynı çereze erişebilir.

CHIPS, üst düzey bağlama göre bölümlendirilmiş siteler arası çerezleri desteklemek için yeni bir çerez özelliği olan Partitioned özelliğini kullanıma sunuyor.

Set-Cookie üstbilgisi:

Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; Partitioned;

JavaScript:

document.cookie="__Host-name=value; Secure; Path=/; SameSite=None; Partitioned;"

Bölümlendirilmiş bir üçüncü taraf çerezi, başlangıçta ayarlandığı üst düzey siteye bağlıdır ve başka bir yerden erişilemez. Bu şekilde, üçüncü taraf bir hizmet tarafından oluşturulan çerezler sadece başlangıçta ayarlandıkları üst düzey sitenin aynı yerleştirilmiş bağlamında okunabilir.

Ortak bir üçüncü tarafın yerleştirildiği iki farklı web sitesinin, artık söz konusu üçüncü tarafın çerezlerini paylaşmayacağını gösteren şema.
Çerez bölümlendirmesi sayesinde, bir üst düzey siteye yerleştirildiğinde çerez oluşturan bir üçüncü taraf hizmeti, başka üst düzey sitelere yerleştirildiğinde aynı çereze erişemez.

Bölümlendirilmiş çerezler sayesinde, bir kullanıcı A sitesini ziyaret ettiğinde ve C sitesinden yerleştirilen içerik, Bölümlendirilmiş özelliğine sahip bir çerez ayarladığında, çerez, yalnızca C sitesi A sitesine yerleştirildiğinde ayarladığı çerezler için atanmış bölümlendirilmiş bir jar bölümüne kaydedilir. Tarayıcı, bu çerezi yalnızca üst düzey site A olduğunda gönderir.

Kullanıcı, örneğin B sitesi gibi yeni bir siteyi ziyaret ettiğinde, yerleştirilmiş C çerçevesi, C sitesi A sitesine yerleştirildiğinde ayarlanan çerezi almaz.

Bir kullanıcı C sitesini üst düzey bir web sitesi olarak ziyaret ederse, C'nin A'ya gömüldüğünde ayarladığı bölümlendirilmiş çerez de bu istekte gönderilmez.

Aynı üçüncü taraf iki farklı web sitesine yerleştirildiğinde çerezlerin paylaşılmadığını gösteren şema.
Çerez bölümlendirmesi sayesinde, siteye yerleştirildiğinde çerez ayarlayan bir üçüncü taraf hizmeti, kullanıcılar ilgili hizmeti üst düzey site olarak ziyaret etse bile aynı çereze erişemez.

Kullanım alanları

Örneğin retail.example sitesi, sitesine bir destek sohbeti kutusu yerleştirmek için üçüncü taraf bir hizmetle support.chat.example çalışmak isteyebilir. Günümüzde birçok gömülebilir sohbet hizmeti, durumu kaydetmek için çerezlerden yararlanmaktadır.

Yerleştirilmiş sohbet widget'ına sahip bir web sitesini gösteren diyagram
Üst düzey site Retail.example.com, üçüncü taraf hizmeti yerleştirme support.chat.example.

Siteler arası çerez ayarlama imkanı olmadan, support.chat.example ürününün durum depolamak için alternatif ve genellikle daha karmaşık yöntemler bulması gerekirdi. Alternatif olarak, support.chat.example komut dosyasının Retail.example sayfasında kimlik doğrulama çerezlerine erişim gibi üst düzey ayrıcalıklara sahip olmasına izin verdiği için risk oluşturan üst düzey sayfaya yerleştirilmesi gerekir.

CHIPS, bölümlendirilmemiş çerezlerle ilişkili riskler olmadan, siteler arası çerezleri kullanmaya devam etmek için daha kolay bir seçenek sunar.

CHIPS için örnek kullanım alanları arasında, siteler arası alt kaynakların, kullanıcının tek bir üst düzey sitedeki etkinliğine odaklanan bir oturum veya kalıcı durum kavramını gerektirdiği durumlarla karşılaşabilirsiniz. Örneğin:

  • Üçüncü taraf sohbet yerleştirmeleri
  • Üçüncü taraf harita yerleştirmeleri
  • Üçüncü taraf ödeme yerleştirmeleri
  • Alt kaynak CDN yük dengeleme
  • Gözetimsiz içerik yönetim sistemi sağlayıcıları
  • Güvenilmeyen kullanıcı içeriklerinin sunulmasına yönelik korumalı alan alanları (googleusercontent.com ve githubusercontent.com gibi)
  • Birinci taraf sitedeki kimlik doğrulama durumu tarafından kontrol edilen içerik (örneğin, üçüncü taraf CDN'lerde barındırılan sosyal medya sitelerindeki profil resimleri) yayınlamak için çerezler kullanan üçüncü taraf CDN'ler
  • İsteklerinde çerezler kullanan uzak API'lerden yararlanan ön uç çerçeveleri
  • Her yayıncı için durum kapsamının belirlenmesi gereken yerleştirilmiş reklamlar (örneğin, söz konusu web sitesi için kullanıcıların reklam tercihlerini yakalama)

CHIPS neden isteğe bağlı bölümlendirme modeli kullanır?

Tarayıcılar, bölümlendirilmemiş üçüncü taraf çerezlerini aşamalı olarak kullanımdan kaldırırken, bölümlendirme için birkaç başka yaklaşım denendi.

Firefox, ETP yüksek düzey modu ve gizli tarama modlarında varsayılan olarak tüm üçüncü taraf çerezlerini bölümlendirdiğini, bu nedenle tüm siteler arası çerezlerin üst düzey site tarafından bölümlendirildiğini duyurdu. Ancak, bazı üçüncü taraf hizmetleri bölümlendirilmemiş üçüncü taraf çerezi bekleyen sunucular oluşturduğundan, çerezleri üçüncü taraf etkinleştirmesi olmadan bölümlendirmek beklenmedik hatalara yol açabilir.

Safari, daha önce çerezleri sezgisel yöntemlere göre bölümlendirmeyi denemişti, ancak sonunda bunları tamamen engellemeye karar verdi ve bunun nedenlerinden biri olarak geliştiricilerin kafasının karıştığını gösterdi. Kısa süre önce, Safari etkinleştirmeye dayalı bir modelle ilgilendiğini ifade etti.

CHIPS'i, bölümlendirilmiş çerezlerin mevcut uygulamalarından ayıran şey, üçüncü taraf tercihidir. Çerezlerin, üçüncü taraf çerezleri kullanımdan kaldırıldıktan sonra (bölümlendirilmemiş) üçüncü taraf isteklerde gönderilebilmesi için yeni bir özellikle ayarlanması gerekir.

Üçüncü taraf çerezleri hâlâ mevcut olsa da Partitioned özelliği, daha kısıtlayıcı ve güvenli bir çerez davranışı türünü etkinleştirme olanağı sağlar. CHIPS, hizmetlerin üçüncü taraf çerezlerinin olmadığı bir geleceğe sorunsuz bir şekilde geçiş yapmasına yardımcı olmak açısından önemli bir adımdır.

Bugün çerezler, sitenin ana makine adında veya alanında, yani ana makine anahtarında anahtar olarak barındırılmaktadır.

Örneğin, https://support.chat.example çerezleri için ana makine anahtarı ("support.chat.example") şeklindedir.

CHIPS altında, bölümlendirmeye dahil olan çerezler ana makine anahtarında ve bölüm anahtarında çift anahtara sahip olacaktır.

Çerez bölüm anahtarı, çerezi ayarlayan uç noktaya isteğin başlangıcında tarayıcının ziyaret ettiği üst düzey URL'nin sitesidir (şema ve kaydedilebilir alan adı).

Önceki örnekte, https://support.chat.example öğesinin https://retail.example adresine yerleştirildiği üst düzey URL, https://retail.example değeridir.

Bu durumda bölüm anahtarı ("https", "retail.example")'dir.

Benzer bir şekilde, isteğin bölümlendirme anahtarı da isteğin başlangıcında tarayıcının ziyaret ettiği üst düzey URL sitesidir. Tarayıcılar, yalnızca bu çerezle aynı bölüm anahtarına sahip isteklerde Partitioned özelliğine sahip bir çerez göndermelidir.

Önceki örnekte verilen çerez anahtarının CHIPS öncesi ve sonrası nasıl göründüğünü burada görebilirsiniz.

A sitesi ve yerleşik C, bölümlendirilmiş bir çerezi paylaşır. C sitesi, yerleştirilmediğinde bölümlendirilmiş çereze erişemez.
A Sitesi ve yerleştirilmiş C sitesi, bölümlendirilmiş bir çerezi paylaşır. C sitesi, yerleştirilmediğinde bölümlendirilmiş çereze erişemez.

ÇIP'lerden önce

key=("support.chat.example")

ÇİPLER SONRASI

key={("support.chat.example"),("https", "retail.example")}

Güvenlik tasarımı

İyi güvenlik uygulamalarını teşvik etmek için CHIPS ile çerezler yalnızca güvenli protokoller tarafından ayarlanır ve bunların üzerinden gönderilir.

  • Bölümlendirilmiş çerezler Secure ile ayarlanmalıdır.
  • Bölümlendirilmiş çerezleri ayarlarken ana makine adına (kayıtlı alana değil) bağlı olmalarını sağlamak için __Host önekinin kullanılması önerilir.

Örnek:

Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;

CHIPS alternatifleri

Storage Access API ve ilişkili İlgili Web Sitesi Grupları (RWS), kullanıcılara yönelik belirli amaçlar için siteler arası sınırlı çerez erişimi sağlayan web platformu mekanizmalarıdır.

Bunlar, siteler arası, bölümlendirilmemiş aşçılara erişimin gerekli olduğu CHIPS bölümlendirmesine alternatiflerdir.

Birden fazla ilgili siteye yerleştirilmiş bir hizmette aynı çerezin kullanılabilmesini gerektiren durumlarda Storage Access API ve İlişkili Websitesi Grupları'nı dikkate alın.

ÇİPS, bir hizmetin birden fazla sitede izole bir bileşen gibi hareket edebilmesini sağlar. Bu durumda, aynı çerezin birden fazla sitede bulunması gerekmez. Hizmet, bölümlendirilmiş bir çerez ayarlarsa bölüm anahtarı en üst düzey site olur ve bu çerez, hizmeti kullanan diğer siteler tarafından kullanılamaz.

İlgili Web Sitesi Gruplarının tasarımı, Storage Access API'yi temel alır ve CHIPS bölümlendirmeyle entegre değildir. RWS'deki sitelerde paylaşılan çerez bölümünden yararlanan bir kullanım alanınız varsa GitHub sorunuyla ilgili örnek ve geri bildirim sağlayabilirsiniz.

Demo

Bu demoda, bölümlendirilmiş çerezlerin işleyiş şekli ve Geliştirici Araçları'nda bunları nasıl inceleyebileceğiniz adım adım açıklanmıştır.

A Sitesi, B Sitesinden iki çerez ayarlamak için JavaScript kullanan bir iframe yerleştirir: bölümlendirilmiş ve bölümlendirilmemiş çerez. B Sitesi, document.cookie kullanarak ilgili konumdan erişilebilen tüm çerezleri gösterir.

Üçüncü taraf çerezleri engellendiğinde B sitesi, yalnızca siteler arası bağlamda Partitioned özelliğine sahip çerezi ayarlayıp erişebilir.

Üçüncü taraf çerezlerine izin verildiğinde, B sitesi de bölümlendirilmemiş çerezi ayarlayabilir ve bunlara erişebilir.

A sitesi ve B sitesi
Sol: Üçüncü taraf çerezleri engellendi. Doğru: Üçüncü taraf çerezlerine izin verilir.

Ön koşullar

  1. Chrome 118 veya sonraki sürümler.
  2. chrome://flags/#test-third-party-cookie-phaseout adresini ziyaret edip bu ayarı etkinleştirin

Bölümlendirilmiş çerezleri incelemek için Geliştirici Araçları'nı kullanma

  1. https://chips-site-a.glitch.me adresini ziyaret edin.
  2. Geliştirici Araçları'nı açmak için Control+Shift+J (veya Mac'te Command+Option+J) tuşuna basın.
  3. Application (Uygulama) sekmesini tıklayın.
  4. Uygulama > Depolama > Çerezler'e gidin.
  5. https://chips-site-b.glitch.me simgesini tıklayın.

Geliştirici Araçları, seçilen kaynaktan gelen tüm çerezleri görüntüler.

DevTools Uygulama sekmesinde B sitesinden çerezler.

B sitesi, bölümlendirilmiş çerezi yalnızca siteler arası bağlamda ayarlayabilir. Bölümlendirilmemiş çerez engellenir:

  • Üst düzey sitenin (https://chips-site-a.glitch.me) bölüm anahtarıyla birlikte __Host-partitioned-cookie ifadesini görmeniz gerekir.
__Host-partitioned-cookie için bölüm anahtarı.
  1. B Sitesine Git'i tıklayın.
  2. DevTools'da Uygulama > Depolama > Çerezler'e gidin.
  3. https://chips-site-b.glitch.me simgesini tıklayın.
B Sitesi
B sitesi en üst düzeyde tüm çerezleri (bölümlendirilmiş ve bölümlendirilmemiş) görebilir

Bu senaryoda, üst düzey bağlamda B sitesinde bulunduğunuz için, site her iki çerezi de ayarlayabilir ve bunlara erişebilir:

  • unpartitioned-cookie öğesinin boş bir bölüm anahtarı var.
  • __Host-partitioned-cookie çerezde https://chips-site-b.glitch.me bölüm anahtarı var.
Üst düzey site olarak B ziyaret edildiğinde Geliştirici Araçları Uygulaması sekmesinde B sitesinden çerezler. __Ana makineyle bölümlendirilmiş-çerez, https://chips-site-b.glitch.me bölüm anahtarına sahiptir.

A sitesine geri dönerseniz unpartitioned-cookie artık tarayıcıda depolanıyor, ancak A sitesinden erişilemeyecek.

  1. A Sitesine Git'i tıklayın.
  2. sekmesini tıklayın.
  3. https://chips-site-b.glitch.me simgesini tıklayın.
  4. Cookies (Çerezler) sekmesini tıklayın.

A sitesindeyken https://chips-site-a.glitch.me adlı üst düzey sitenin bölüm anahtarıyla birlikte __Host-partitioned-cookie bölümünü göreceksiniz.

B sitesi iframe'inden gelen ve A sitesine yerleştirildiğinde erişilebilen çerezleri gösteren ağ sekmesi.

Filtrelenmiş çerez isteklerini göster seçeneğini işaretlerseniz Geliştirici Araçları, bölümlendirilmemiş çerezin engellendiğini gösterir ve sarıyla vurgulanmıştır: "Bu çerez, kullanıcı tercihleri nedeniyle engellendi".

B sitesi iframe'inden engellenen çerezleri gösteren ağ sekmesi.

Uygulama > Depolama > Çerezler bölümünde https://chips-site-b.glitch.me öğesini tıkladığınızda şunlar gösterilir:

  • unpartitioned-cookie komutunu çalıştırın.
  • https://chips-site-a.glitch.me bölüm anahtarına sahip __Host-partitioned-cookie çerezi.
DevTools Uygulama sekmesinde B sitesinden çerezler. __Host-partitioned-cookie çerezde https://chips-site-a.glitch.me bölüm anahtarı var. unpartitioned-cookie gösteriliyor ancak A sitesine yerleştirildiğinde B sitesi iframe'ine erişemez.

Çerezleri sil

Demoyu sıfırlamak için sitenin tüm çerezlerini temizleyin:

  • Geliştirici Araçları'nı açmak için Control+Shift+J (veya Mac'te Command+Option+J) tuşuna basın.
  • Application (Uygulama) sekmesini tıklayın.
  • Uygulama > Depolama > Çerezler'e gidin.
  • https://chips-site-b.glitch.me dosyasını sağ tıklayın.
  • Temizle'yi tıklayın.

Kaynaklar