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

  • Chrome: 114.
  • Kenar: 114.
  • Firefox Teknoloji Önizlemesi: desteklenir.
  • Safari: Desteklenmez.

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.

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

Tarayıcılar, bölümlenmemiş üçüncü taraf çerezlerini kullanımdan kaldırmaya çoktan başladı. Bu nedenle, üçüncü taraf çerezleri engellendiğinde CHIPS, Storage Access API ve İlgili Web Sitesi Kümeleri, iframe'ler gibi siteler arası bağlamlardan çerez okumanın ve yazmanın tek yolu olacaktır.

Aşçıların 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.

Bir kullanıcı C sitesini üst düzey web sitesi olarak ziyaret ederse C'nin A'ya yerleştirildiğinde ayırdığı çerez de bu istekle birlikte 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, support.chat.example komut dosyasının retail.example üzerinde kimlik doğrulama çerezlerine erişme gibi yüksek ayrıcalıklara sahip olmasına izin verdiği için üst düzey sayfaya yerleştirilmesi gerekir. Bu da riskler doğurur.

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 öğe 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ümlenmemiş üçüncü taraf çerezleri bekleyen sunucular oluşturduğundan, çerezleri üçüncü taraf izni olmadan bölümlere ayırmak 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 ayıran özellik üçüncü taraf etkinleştirmesidir. Ç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, yalnızca Partitioned özelliğine sahip bir çerezi, bu ç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 çerez paylaşır. Yerleştirilmediğinde, C sitesi bölümlendirilmiş çereze erişemez.
A sitesi ve yerleştirilmiş C sitesi, bölümlendirilmiş bir çerez 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.

Alakalı birden fazla siteye yerleştirilmiş bir hizmette aynı çerezin kullanılabilmesine ihtiyaç duyduğunuzda 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 Web Sitesi Kümeleri tasarımı, Depolama Alanı Erişimi API'sini kullanır ve CHIPS bölümlemeyle 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, çerezi yalnızca siteler arası bağlamda Partitioned özelliğiyle ayarlayabilir ve ona 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.
__Host-partitioned-cookie için bölüm anahtarı.
  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.
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 sahiptir.
B'yi üst düzey site olarak ziyaret ettiğinizde Geliştirici Araçları Uygulama sekmesinde B sitesinden çerezler. __Host-partitioned-cookie, bölüm anahtarı https://chips-site-b.glitch.me'ye 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 site https://chips-site-a.glitch.me'un bölüm anahtarını içeren __Host-partitioned-cookie öğesini 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.

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.
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 simgesini sağ tıklayın.
  • Temizle'yi tıklayın.

Kaynaklar