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

Geliştiricilerin, bir çerezi "bölümlendirilmiş" olarak etkinleştirmesine izin ver her üst düzey sitede ayrı bir çerez kavanozuyla birlikte saklamanızı öneririz.

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 her üst düzey site için ayrı çerez kutuları olacak şekilde bölümlendirilmiş depolama alanına çerez eklemelerine olanak tanıyarak kullanıcı gizliliğini ve güvenliğini artırır.

Üçüncü taraf çerezleri, bölümlendirme yapılmadan, hizmetlerin kullanıcıları izlemesine ve alakasız birçok üst düzey siteden bilgilerini birleştirmesine olanak tanıyabilir. Bu işlem, siteler arası izleme olarak bilinir.

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

Yemeklerin iki farklı web sitesi arasında nasıl paylaşılabileceğini gösteren şema.
Çerez bölümlendirme uygulanmadan bir üçüncü taraf hizmeti, üst düzey bir siteye yerleştirildiğinde bir çerez ayarlayabilir ve hizmet başka üst düzey sitelere yerleştirildiğinde aynı çereze erişebilir.

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

Set-Cookie başlığı:

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, bir üçüncü taraf hizmeti tarafından ayarlanan çerezler, yalnızca başlangıçta ayarlandıkları üst düzey sitenin aynı yerleşik bağlamında okunabilir.

Ortak bir üçüncü tarafı yerleştiren iki farklı web sitesinin, artık söz konusu üçüncü taraf için çerezleri paylaşmayacağını gösteren şema.
Çerez bölümlendirme ile, üst düzey bir siteye yerleştirildiğinde çerez ayarlayan bir üçüncü taraf hizmeti, hizmet 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 sitesindeki yerleşik içerik, Bölümlendirilmiş özelliğiyle bir çerez ayarladığında, çerez, yalnızca C sitesinin A sitesine yerleştirildiğinde ayarladığı çerezler için atanmış olan bölümlendirilmiş bir kavanoza kaydedilir. Tarayıcı, bu çerezi yalnızca üst düzey site A olduğunda gönderir.

Kullanıcı yeni bir siteyi (ör. B sitesi) ziyaret ettiğinde yerleştirilmiş bir C çerçevesi, C sitesi A sitesine yerleştirilirken ayarlanan çerezi almaz.

Kullanıcı C sitesini üst düzey web sitesi olarak ziyaret ederse, C'nin A içine yerleştirilirken 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ümlendirme ile, bir siteye yerleştirildiğinde çerez ayarlayan bir üçüncü taraf hizmeti, kullanıcılar hizmeti üst düzey site olarak ziyaret ettiğinde bile aynı çereze erişemez.

Kullanım alanları

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

Yerleşik sohbet widget'ı içeren bir web sitesini gösteren şema
Üçüncü taraf bir hizmet yerleştiren support.chat.example adlı üst düzey site Retail.example.

Siteler arası çerez ayarlama olanağı olmadığında support.chat.example, durumu depolamak için alternatif ve genellikle daha karmaşık yöntemler bulmalıdır. Alternatif olarak, kodun üst düzey sayfaya yerleştirilmesi gerekir. Bu durum, support.chat.example komut dosyasının Retail.example'da kimlik doğrulama çerezlerine erişme gibi üst düzey ayrıcalıklara sahip olmasına izin verdiği için risk teşkil eder.

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

CHIPS'nin kullanım alanlarına örnek olarak, siteler arası alt kaynakların bir kullanıcının tek bir üst düzey sitedeki etkinliğini kapsayan bazı oturum ya da kalıcı durum kavramını gerektirdiği senaryolar verilebilir. Örneğin:

  • Üçüncü taraf sohbet yerleştirme
  • Üçüncü taraf harita yerleştirmeleri
  • Üçüncü taraf ödeme yerleştirilmiş öğeler
  • Alt kaynak CDN yük dengeleme
  • Gözetimsiz içerik yönetim sistemi sağlayıcıları
  • Güvenilmeyen kullanıcı içeriği sunmak için kullanılan korumalı alan alanları (googleusercontent.com ve githubusercontent.com gibi)
  • Birinci taraf sitedeki kimlik doğrulama durumu tarafından kontrol edilen içerikleri sunmak için çerezleri kullanan üçüncü taraf CDN'ler (örneğin, üçüncü taraf CDN'lerde barındırılan sosyal medya sitelerindeki profil resimleri)
  • İsteklerinde çerez kullanan uzak API'lere dayanan kullanıcı arabirimi çerçeveleri
  • Her yayıncı için durum kapsamının belirlenmesi gereken yerleşik reklamlar (ör. kullanıcıların söz konusu web sitesiyle ilgili reklam tercihlerini yakalama)

CHIPS neden tercihe bağlı bölümlendirme modeli kullanıyor?

Tarayıcılar, bölümlendirilmemiş üçüncü taraf çerezlerini aşamalı olarak kullanımdan kaldırdığı için bölümlendirmeye yönelik birkaç farklı yaklaşım denendi.

Firefox, ETP Katı modunda ve gizli tarama modunda tüm üçüncü taraf çerezlerini varsayılan olarak bölümlendirdiğini duyurdu. Bu nedenle, tüm siteler arası çerezler üst düzey siteye göre bölümlendirildi. Ancak, bazı üçüncü taraf hizmetleri, bölümlendirilmemiş üçüncü taraf çerezleri bekleyen sunuculara sahip olduğundan, üçüncü taraf etkinleştirmesi olmadan çerezleri bölümlendirmek beklenmedik hatalara neden olabilir.

Safari daha önce buluşsal yöntemlere göre çerezleri bölümlendirmeyi denemişti ancak sonunda geliştiricilerle ilgili kafa karışıklığının nedeninin de olduğunu belirterek çerezleri tamamen engellemeyi seçmiştir. Kısa süre önce Safari, tercihe dayalı bir modelle ilgilendiğini belirtti.

CHIPS'i, bölümlendirilmiş çerezlerin mevcut uygulamalarından farklı kılan, üçüncü taraf etkinleştirme seçeneğidir. Çerezlerin, (bölümlendirilmemiş) üçüncü taraf çerezleri kullanımdan kaldırıldığında taraflar arası 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ğı sunar. CHIPS, hizmetlerin üçüncü taraf çerezlerinin olmadığı bir geleceğe sorunsuz bir şekilde geçiş yapmasına yardımcı olacak önemli bir adımdır.

Günümüzde çerezler, onları ayarlayan sitenin ana makine adına veya alan adına, yani ana makine anahtarına kaydedilir.

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

CHIPS altında, bölümlendirmeyi etkinleştiren çerezler ana makine anahtarında ve bölümlendirme anahtarında çift anahtarlı olur.

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

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

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

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

Önceki örnekteki çerez anahtarı, CHIPS öncesinde ve sonrasında şu şekilde görünür.

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

CHIPS'ten önce

key=("support.chat.example")

CHIPS'ten sonra

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 bu protokoller üzerinden gönderilir.

  • Bölümlendirilmiş çerezler Secure ile ayarlanmalıdır.
  • Bölümlendirilmiş çerezleri ayarlarken, kayıt edilebilir alana değil, ana makine adına bağlı hale getirmek için __Host- önekinin kullanılması önerilir.

Örnek:

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

CHIPS için alternatifler

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şimini etkinleştiren web platformu mekanizmalarıdır.

Bunlar, siteler arası, bölümlendirilmemiş yemek uzmanlarına erişimin gerekli olduğu CHIPS bölümlendirmesine alternatiftir.

Birden fazla alakalı siteye yerleştirilmiş bir hizmette aynı çerezin kullanılabilmesi için aynı çerezin gerekli olduğu durumlarda Storage Access API ve İlişkili Websitesi Grupları'nı kullanabilirsiniz.

CHIPS, aynı çerezin birden çok sitede kullanılmasının gerekmediği durumlarda, bir hizmetin birden çok sitede izole bir bileşen olarak görev yapmasına olanak tanır. Hizmet bölümlendirilmiş bir çerez ayarlarsa bölüm anahtarı üst düzey site olur ve bu çerez, hizmeti kullanan diğer siteler tarafından kullanılamaz.

İlgili Websitesi Grupları tasarımı, Storage Access API'yi temel alır ve CHIPS bölümlendirmesi ile entegre edilmez. RWS'deki siteler arasında paylaşılan çerez bölümünü temel alan bir kullanım alanınız varsa GitHub sorunuyla ilgili örnekler ve geri bildirim sağlayabilirsiniz.

Demo

Bu demo, bölümlendirilmiş çerezlerin işleyiş şekli ve bunları Geliştirici Araçları'nda nasıl inceleyebileceğiniz konusunda size yol gösterir.

A Sitesi, B Sitesinden iki çerez ayarlamak için JavaScript kullanan bir iframe yerleştirir: bölümlendirilmiş ve bölümlenmemiş bir çerez. B Sitesi, document.cookie kullanılarak o konumdan erişilebilen tüm çerezleri görüntüler.

Üçüncü taraf çerezleri engellendiğinde B sitesi, çerezlere yalnızca siteler arası bağlamda Partitioned özelliğini kullanarak erişebilir.

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

A sitesi ve B sitesi
Sol: Üçüncü taraf çerezleri engellendi. Sağ: Üçüncü taraf çerezlerine izin veriliyor.

Ön koşullar

  1. Chrome 118 veya sonraki sürümler.
  2. chrome://flags/#test-third-party-cookie-phaseout sayfasını ziyaret edin ve 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.
  5. https://chips-site-b.glitch.me simgesini tıklayın.

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

Geliştirici Araçları Uygulama sekmesinde B sitesindeki çerezler.

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

  • https://chips-site-a.glitch.me üst düzey sitesinin bölüm anahtarıyla birlikte __Host-partitioned-cookie göreceksiniz.
ziyaret edin.
__Host-partitioned-cookie için bölüm anahtarı.
ziyaret edin.
  1. B Sitesine Git'i tıklayın.
  2. Geliştirici Araçları'nda Uygulama > Depolama > Çerezler.
  3. https://chips-site-b.glitch.me simgesini tıklayın.
ziyaret edin.
B Sitesi
Üst düzeyde, B sitesi tüm çerezleri (bölümlendirilmiş ve bölümlendirilmemiş) görebilir

Bu senaryoda, üst düzey bağlamda B sitesinde olduğunuzdan her iki çerezi de ayarlayabilir ve bunlara erişebilir:

  • unpartitioned-cookie, boş bir bölüm anahtarı içeriyor.
  • __Host-partitioned-cookie çerezi, https://chips-site-b.glitch.me bölüm anahtarına sahip.
ziyaret edin.
B'yi üst düzey site olarak ziyaret ettiğinizde Geliştirici Araçları Uygulama sekmesinde B sitesinden çerezler. __Host-partitioned-cookie, 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ır, ancak A sitesine erişilemez.

  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 üst düzey sitenin https://chips-site-a.glitch.me bölüm anahtarını içeren __Host-partitioned-cookie görürsünüz.

A sitesine yerleştirildiğinde erişilebilen, B sitesi iframe'ine ait ç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 vurgulanır: "Bu çerez, kullanıcı tercihleri nedeniyle engellendi".

B sitesindeki iframe'de engellenen çerezleri gösteren ağ sekmesi.
ziyaret edin.

Uygulama > Depolama > Çerezler https://chips-site-b.glitch.me tıklandığında şunları gösterir:

  • unpartitioned-cookie yerine boş bölüm anahtarı kullanın.
  • https://chips-site-a.glitch.me bölüm anahtarına sahip __Host-partitioned-cookie çerez.
ziyaret edin.
Geliştirici Araçları Uygulama sekmesinde B sitesinden çerezler. __Host-partitioned-cookie çerezi, https://chips-site-a.glitch.me bölüm anahtarına sahip. unpartitioned-cookie gösteriliyor ancak A sitesine yerleştirildiğinde B sitesi iframe'i bu içeriğe erişemez.

Çerezleri temizle

Demoyu sıfırlamak için siteye ait tüm çerezleri 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.
  • https://chips-site-b.glitch.me öğesini sağ tıklayın.
  • Temizle'yi tıklayın.

Kaynaklar