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
- 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.
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.
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.
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.
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, 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.
Ç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, 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.
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.
Ö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 sahiptir.
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 site https://chips-site-a.glitch.me
'un bölüm anahtarını içeren __Host-partitioned-cookie
öğesini 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".
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
simgesini 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.