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

Geliştiricilerin, üst düzey site başına ayrı bir çerez kavanozuyla çerezleri "bölümlendirilmiş" depolamaya dahil etmesine izin verilir.

Uygulama durumu

Browser Support

  • Chrome: 114.
  • Edge: 114.
  • Firefox: 141.
  • Safari: not supported.

Source

CHIPS nedir?

Bağımsız Bölümlendirme Durumuna Sahip Çerezler (CHIPS), geliştiricilerin bir çerezi bölümlendirilmiş depolamaya dahil etmesine olanak tanır. Üst düzey site başına ayrı çerez kavanozları sayesinde kullanıcı gizliliği ve güvenliği iyileştirilir.

Bölümleme olmadan üçüncü taraf çerezleri, hizmetlerin kullanıcıları izlemesine ve bilgilerini birçok alakasız üst düzey siteden birleştirmesine olanak tanır. Bu, siteler arası izleme olarak bilinir.

Üçüncü taraf çerezleri engellendiğinde, siteler arası bağlamlardaki (ör. iFrame'ler) çerezleri okumanın ve yazmanın tek yolu CHIPS, Storage Access API ve İlişkili Websitesi Grupları'dır.

Çerezlerin iki farklı web sitesi arasında nasıl paylaşılabileceğini gösteren şema.
Çerez bölümleme olmadan, bir üçüncü taraf hizmeti üst düzey bir siteye yerleştirildiğinde çerez ayarlayabilir ve hizmet 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 (Partitioned) sunar.

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ş üçüncü taraf çerezleri, ilk olarak ayarlandığı üst düzey siteye bağlıdır ve başka bir yerden erişilemez. Bu sayede, üçüncü taraf hizmeti tarafından ayarlanan çerezler yalnızca ilk olarak ayarlandıkları üst düzey sitenin aynı yerleştirilmiş bağlamında okunabilir.

Ortak bir üçüncü tarafı yerleştiren iki farklı web sitesinin artık bu üçüncü tarafın çerezlerini paylaşmayacağını gösteren şema.
Çerez bölümleme sayesinde, bir üst düzey siteye yerleştirildiğinde çerez ayarlayan bir üçüncü taraf hizmeti, hizmet diğer üst düzey sitelere yerleştirildiğinde aynı çereze erişemez.

Bölümlendirilmiş çerezlerde, bir kullanıcı A sitesini ziyaret ettiğinde ve C sitesinden yerleştirilmiş içerik, Partitioned özelliğiyle bir çerez ayarladığında çerez, yalnızca C sitesinin A sitesine yerleştirildiğinde ayarladığı çerezler için belirlenmiş 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'ya yerleştirildiğinde ayarlanan çerezi almaz.

Bir kullanıcı C sitesini üst düzey bir web sitesi olarak ziyaret ederse C'nin A'ya yerleştirildiği sırada ayarladığı bölümlenmiş ç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 sayesinde, bir siteye yerleştirildiğinde çerez ayarlayan bir üçüncü taraf hizmeti, kullanıcılar hizmeti üst düzey site olarak ziyaret etse 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 adlı üçüncü taraf hizmetiyle çalışmak isteyebilir. Günümüzde birçok yerleştirilebilir sohbet hizmeti, durumu kaydetmek için çerezleri kullanır.

Yerleştirilmiş bir sohbet widget'ı olan web sitesini gösteren diyagram
Üçüncü taraf hizmeti yerleştiren üst düzey site retail.example support.chat.example.

Siteler arası çerez ayarlama özelliği olmadan support.chat.example, durumu depolamak için genellikle daha karmaşık olan alternatif yöntemler bulmak zorunda kalır. Alternatif olarak, support.chat.example komut dosyasının retail.example üzerinde kimlik doğrulama çerezlerine erişme gibi daha yüksek ayrıcalıklara sahip olmasına izin verdiği için risklere yol açan üst düzey sayfaya yerleştirilmesi gerekir.

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

CHIPS'in kullanım alanlarına örnek olarak, siteler arası alt kaynakların tek bir üst düzey sitedeki kullanıcı etkinliğiyle sınırlı bir oturum veya kalıcı durum kavramı gerektirdiği tüm senaryolar verilebilir. Ö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 İYS sağlayıcıları
  • Güvenilmeyen kullanıcı içeriği sunmak için kullanılan korumalı alan adları (ör. googleusercontent.com ve githubusercontent.com)
  • Birinci taraf sitesindeki kimlik doğrulama durumuyla erişimi kontrol edilen içerikleri sunmak için çerezleri kullanan üçüncü taraf CDN'leri (ör. üçüncü taraf CDN'lerinde barındırılan sosyal medya sitelerindeki profil resimleri)
  • İsteklerinde çerez kullanan uzak API'lere dayanan ön uç çerçeveleri
  • Yayıncıya göre kapsamı belirlenmesi gereken yerleştirilmiş reklamlar (örneğin, kullanıcıların söz konusu web sitesiyle ilgili reklam tercihlerini yakalama)

CHIPS neden etkinleştirme tabanlı bir bölümleme modeli kullanır?

Bölümlenmemiş üçüncü taraf çerezlerine erişimin engellendiği durumlarda, bölümlendirme için başka yaklaşımlar da denenmiştir.

Firefox, ETP Strict modunda ve özel 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ümlendiriliyor. Ancak üçüncü taraf katılımı olmadan çerezlerin bölümlendirilmesi, bazı üçüncü taraf hizmetlerinin bölümlendirilmemiş bir üçüncü taraf çerezi bekleyen sunucular oluşturması nedeniyle beklenmedik hatalara yol açabilir.

Safari daha önce çerezleri sezgisel yöntemlere göre bölmeyi denemiş ancak geliştiricilerin kafasının karışmasını nedenlerden biri olarak göstererek sonunda çerezleri tamamen engellemeyi tercih etmiştir. Safari yakın zamanda izin tabanlı bir modelle ilgilendiğini belirtti.

CHIPS'i mevcut bölümlendirilmiş çerez uygulamalarından ayıran özellik, üçüncü taraf katılımıdır. (Bölümlere ayrılmamış) üçüncü taraf çerezleri kullanımdan kaldırıldıktan sonra taraflar arası isteklerde gönderilebilmeleri için çerezlere yeni bir özellik eklenmesi gerekir.

Üçüncü taraf çerezleri hâlâ mevcut olsa da Partitioned özelliği, daha kısıtlayıcı ve daha güvenli bir çerez davranışına izin verme seçeneği sunar. CHIPS, hizmetlerin üçüncü taraf çerezlerinin olmadığı bir geleceğe sorunsuz geçiş yapmasına yardımcı olacak önemli bir adımdır.

Günümüzde çerezler, bunları ayarlayan sitenin ana makine adına veya alan adına göre anahtarlanır. Diğer bir deyişle, ana makine anahtarı kullanılır.

Örneğin, https://support.chat.example alanından gelen çerezler için ana makine anahtarı ("support.chat.example") olur.

CHIPS kapsamında, bölümlendirmeyi etkinleştiren çerezler, anahtar anahtarları ve bölüm anahtarları ile çift anahtarlı olur.

Çerezin bölüm anahtarı, tarayıcının çerezi ayarlayan uç noktaya istek göndermeye başladığında ziyaret ettiği üst düzey URL'nin sitesidir (şema ve kaydedilebilir alan).

Daha önceki örnekte, https://support.chat.example öğesinin https://retail.example öğesine yerleştirildiği durumda üst düzey URL https://retail.example olur.

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

Benzer şekilde, isteğin bölüm anahtarı, tarayıcının bir isteğin başlangıcında ziyaret ettiği üst düzey URL'nin 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 örnekteki çerez anahtarının CHIPS'ten önce ve sonra nasıl göründüğünü aşağıda görebilirsiniz.

A sitesi ve yerleştirilmiş C sitesi, bölümlendirilmiş bir çerez paylaşıyor. Yerleştirilmediğinde C sitesi, bölümlendirilmiş çereze erişemez.
A sitesi ve yerleştirilmiş C sitesi, bölümlendirilmiş bir çerezi paylaşıyor. 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ı

CHIPS ile iyi güvenlik uygulamalarını teşvik etmek için ç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ümlenmiş çerezleri ana makine adına (kayıt edilebilir alan adına değil) bağlı hale getirmek için __Host- önekini kullanmanız önerilir.

Örnek:

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

CHIPS'e alternatifler

Storage Access API ve ilişkili İlişkili Web Sitesi Grupları (RWS), belirli ve kullanıcıya yönelik amaçlar için sınırlı siteler arası çerez erişimini etkinleştirmeye yönelik web platformu mekanizmalarıdır.

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

Aynı çerezin birden fazla ilişkili siteye yerleştirilmiş bir hizmet tarafından kullanılabilmesi gerektiği durumlarda Storage Access API ve İlişkili Web Sitesi Grupları'nı kullanabilirsiniz.

CHIPS, bir hizmetin birden fazla sitede yalıtılmış bir bileşen olarak hareket etmesini sağlar. Bu durumda aynı çerezin birden fazla sitede kullanılabilir olması gerekmez. 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.

İlişkili Web Sitesi Grupları tasarımı, Storage Access API'yi kullanır ve CHIPS bölümlendirmesiyle entegre olmaz. Bir RWS içindeki sitelerde paylaşılan çerez bölümüne dayanan bir kullanım alanınız varsa GitHub sorununda örnekler ve geri bildirimler paylaşabilirsiniz.

Demo

Bu demo, bölümlenmiş çerezlerin nasıl çalıştığını ve bunları Geliştirici Araçları'nda nasıl inceleyebileceğinizi gösterir.

A sitesi, B sitesinden bir iFrame yerleştirir. Bu iFrame, bölümlere ayrılmış ve ayrılmamış olmak üzere iki çerez ayarlamak için JavaScript kullanır. B sitesi, document.cookie kullanılarak o konumdan erişilebilen tüm çerezleri gösterir.

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

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

A sitesi ve B sitesi
Sol: Üçüncü taraf çerezleri engellenir. Sağ: Üçü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. 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 kaynaktaki tüm çerezleri gösterir.

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

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

  • Üst düzey sitenin bölüm anahtarıyla birlikte __Host-partitioned-cookie simgesini görürsünüz https://chips-site-a.glitch.me.
__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'e gidin.
  3. https://chips-site-b.glitch.me simgesini tıklayın.
B sitesi
En üst düzeyde, B sitesi hem bölümlendirilmiş hem de bölümlendirilmemiş tüm çerezleri görebilir

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

  • unpartitioned-cookie adlı kullanıcının boş bir bölüm anahtarı var.
  • __Host-partitioned-cookie çerezinde https://chips-site-b.glitch.me bölüm anahtarı var.
B sitesini üst düzey site olarak ziyaret ederken Geliştirici Araçları Uygulama sekmesindeki B sitesinden gelen çerezler. __Host-partitioned-cookie, https://chips-site-b.glitch.me bölüm anahtarına sahip.

Site A'ya geri dönerseniz unpartitioned-cookie artık tarayıcıda depolanır ancak site A'dan 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 bölüm anahtarıyla birlikte __Host-partitioned-cookie simgesini görmeniz gerekir https://chips-site-a.glitch.me.

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

Filtreyle hariç tutulan çerez isteklerini göster'i işaretlerseniz Geliştirici Araçları, bölümleme yapılmamış çerezin engellendiğini gösterir ve "Bu çerez, kullanıcı tercihleri nedeniyle engellendi" ipucuyla birlikte sarı renkte vurgular.

B sitesinin iFrame'inden engellenen çerezleri gösteren Ağ sekmesi.

Uygulama > Depolama > Çerezler'de https://chips-site-b.glitch.me simgesini tıkladığınızda şunlar gösterilir:

  • unpartitioned-cookie boş bölüm anahtarıyla.
  • __Host-partitioned-cookie bölüm anahtarıyla çerez https://chips-site-a.glitch.me.
Geliştirici Araçları Uygulama sekmesinde site B'den gelen çerezler. __Host-partitioned-cookie çerezinde https://chips-site-a.glitch.me bölüm anahtarı var. unpartitioned-cookie gösteriliyor ancak site A'ya yerleştirildiğinde site B iframe'i tarafından erişilemiyor.

Çerezleri temizle

Demoyu sıfırlamak için siteyle ilgili 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.
  • Uygulama sekmesini tıklayın.
  • Uygulama > Depolama > Çerezler'e gidin.
  • https://chips-site-b.glitch.me simgesini sağ tıklayın.
  • Temizle'yi tıklayın.

Kaynaklar