Geliştiricilerin, bir çerezi "bölümlendirilmiş" olarak etkinleştirmesine izin ver her üst düzey site için ayrı bir çerez kavanozuyla birlikte bir depolama alanı alır.
Uygulama durumu
- Chrome 114 ve sonraki sürümlerde varsayılan olarak desteklenir.
- Chrome 100 ve 116 sürümlerinde kaynak denemesi artık tamamlandı.
- Deneme Amacı ve Gönderim Amacı bölümlerini okuyun.
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.
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.
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.
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.
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.
Çerez bölümlendirme teknik tasarımı
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.
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.
Ön koşullar
- Chrome 118 veya sonraki sürümler.
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
- https://chips-site-a.glitch.me adresini ziyaret edin.
- Geliştirici Araçları'nı açmak için
Control+Shift+J
(veya Mac'teCommand+Option+J
) tuşuna basın. - Application (Uygulama) sekmesini tıklayın.
- Uygulama > Depolama > Çerezler.
https://chips-site-b.glitch.me
simgesini tıklayın.
Geliştirici Araçları, seçilen kaynaktaki tüm çerezleri görüntüler.
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.
- B Sitesine Git'i tıklayın.
- Geliştirici Araçları'nda Uygulama > Depolama > Çerezler.
https://chips-site-b.glitch.me
simgesini tıklayın.
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.
A sitesine geri dönerseniz unpartitioned-cookie
artık tarayıcıda depolanır, ancak A sitesine erişilemez.
- A Sitesine Git'i tıklayın.
- Ağ sekmesini tıklayın.
https://chips-site-b.glitch.me
simgesini tıklayın.- 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.
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".
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.
Ç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'teCommand+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
- GitHub: Açıklayıcıyı okuyun, soruları sorun ve tartışmayı takip edin.
- Geliştirici desteği: Özel Korumalı Alan Geliştirici Desteği deposunda soru sorun ve tartışmalara katılın.