Chrome, Firefox, Edge ve diğer tarayıcılar, varsayılan davranışlarını IETF teklifine uygun şekilde değiştiriyor. Artımlı Olarak Daha İyi Çerezler teklifi sayesinde:
SameSite
özelliği olmayan çerezlerSameSite=Lax
olarak değerlendirilir. Bu, varsayılan davranışın çerezleri yalnızca birinci taraf bağlamlarıyla kısıtlamak olduğu anlamına gelir.- Siteler arası kullanıma yönelik çerezlerde, üçüncü taraf bağlamına dahil edilmeyi etkinleştirmek için
SameSite=None; Secure
belirtilmelidir.
Henüz yapmadıysanız üçüncü taraf çerezlerinizin özelliklerini güncelleyerek gelecekte engellenmesini önleyebilirsiniz.
Siteler arası veya üçüncü taraf çerezlerin kullanım alanları
Çerezlerin üçüncü taraf bağlamında gönderilmesi gereken bazı yaygın kullanım alanları ve kalıplar vardır. Bu kullanım alanlarından birini sağlıyorsanız veya bu alanlardan birine bağlıysanız hizmetin düzgün şekilde çalışması için sizin veya sağlayıcının çerezlerini güncellediğinizden emin olun.
<iframe>
içindeki içerikler
<iframe>
içinde gösterilen farklı bir siteden alınan içerik, üçüncü taraf bağlamındadır. Standart kullanım alanları şunlardır:
- Diğer sitelerden paylaşılan yerleştirilmiş içerikler (ör. videolar, haritalar, kod örnekleri ve sosyal medya yayınları).
- Ödeme, takvim, rezervasyon ve rezervasyon özellikleri gibi harici hizmetlerdeki widget'lar.
- Sosyal medya düğmeleri veya sahtekarlık karşıtı hizmetler gibi daha az belirgin widget'lar
<iframes>
.
Çerezler, oturum durumunu korumak, genel tercihleri depolamak, istatistikleri etkinleştirmek veya mevcut hesapları olan kullanıcılar için içeriği kişiselleştirmek gibi çeşitli amaçlarla kullanılabilir.
Web doğası gereği birleştirilebilir olduğundan, <iframes>
üst düzey veya birinci taraf bağlamında görüntülenen içeriği yerleştirmek için de kullanılır. Sitenin iframe'de görüntülediği tüm çerezler, üçüncü taraf çerezleri olarak kabul edilir. Diğer sitelerin yerleştirmesini istediğiniz siteler oluşturuyorsanız ve bunların çalışması için çerezlere ihtiyacınız varsa bu çerezlerin siteler arası kullanım için işaretlendiğinden veya bunlar olmadan sorunsuz bir şekilde geçiş yapabileceğinizden de emin olmanız gerekir.
Siteler genelinde "güvenli olmayan" istekler
"Güvenli değil" ifadesi endişe verici görünse de durum değişikliği amaçlı olabilecek tüm istekleri ifade eder. Web'de bu, esas olarak POST istekleridir. SameSite=Lax
olarak işaretlenen çerezler, farklı bir siteye gitmek için bir bağlantıyı tıklamak gibi güvenli üst düzey gezinmelerde gönderilir. Ancak POST yöntemini kullanarak farklı bir siteye <form>
gönderim yapılması gibi işlemler çerez içermez.
Bu kalıp, kullanıcıyı geri dönmeden önce uzak bir hizmete yönlendirerek bazı işlemleri gerçekleştirebilen siteler için kullanılır (ör. üçüncü taraf kimlik sağlayıcıya yönlendirme). Kullanıcı siteden ayrılmadan önce, tek kullanımlık jeton içeren bir çerez ayarlanır. Burada, Siteler Arası İstek Sahtekarlığı (CSRF) saldırılarını azaltmak amacıyla geri gelen istekte bu jetonun kontrol edilmesi beklenmektedir. Bu geri gelen istek POST üzerinden geliyorsa çerezleri SameSite=None; Secure
olarak işaretlemeniz gerekir.
Uzaktan kaynaklar
Bir sayfadaki uzak kaynaklar (ör. <img>
veya <script>
etiketleri), istekle birlikte gönderilen çerezleri kullanabilir. İzleme pikselleri ve içeriği kişiselleştirme, yaygın kullanım alanlarından bazılarıdır.
Bu durum, JavaScript'inizden fetch
veya XMLHttpRequest
kullanılarak gönderilen istekler için de geçerlidir. fetch()
, credentials: 'include'
seçeneği ile çağrılırsa bu isteklerin çerez içermesi muhtemeldir.
XMLHttpRequest
için beklenen çerezler genellikle true
için bir withCredentials
değeriyle gösterilir. Bu çerezler, siteler arası isteklere dahil edilmek için uygun şekilde işaretlenmelidir.
WebView'deki içerik
Platforma özel uygulamalardaki WebView, tarayıcı tarafından desteklenir. Geliştiricilerin, uygulamalarını etkileyen kısıtlamaların veya sorunların, uygulamalarının Web Görünümleri için de geçerli olup olmadığını test etmeleri gerekir.
Android, platforma özgü uygulamalarının doğrudan CookieManager API'yi kullanarak çerez ayarlamasına da olanak tanır.
Üstbilgi veya JavaScript kullanılarak ayarlanan çerezlerde olduğu gibi, siteler arası kullanım için tasarlanmış çerezleri SameSite=None; Secure
ile ekleyebilirsiniz.
SameSite
'ü bugün uygulama
Yalnızca birinci taraf bağlamında ihtiyaç duyulan çerezleri ihtiyaçlarınıza bağlı olarak SameSite=Lax
veya SameSite=Strict
olarak işaretleyin. Bu çerezleri işaretlemezseniz ve bunları işlemek için varsayılan tarayıcı davranışına güvenirseniz tarayıcılar arasında tutarsız davranabilir ve her çerez için konsol uyarıları tetikleyebilir.
Set-Cookie: first_party_var=value; SameSite=Lax
Üçüncü taraf bağlamında gerekli olan tüm çerezleri SameSite=None; Secure
olarak işaretlediğinizden emin olun. Her iki özellik de gereklidir. Secure
olmadan yalnızca None
belirtirseniz çerez reddedilir. Tarayıcı uygulamalarındaki farklılıkları hesaba katmak için Uyumlu olmayan istemcileri işleme bölümünde açıklanan azaltma stratejilerinden bazılarını kullanmanız gerekebilir.
Set-Cookie: third_party_var=value; SameSite=None; Secure
Uyumsuz istemcileri işleme
None
öğesini içermek ve varsayılan davranışı güncellemek için yapılan bu değişiklikler hâlâ nispeten yeni olduğundan, farklı tarayıcılar bunları farklı şekillerde ele alır. Bilinen sorunların listesi için chromium.org'daki güncellemeler sayfasına göz atabilirsiniz ancak bu listede olası her örneğe yer verilmemiş olabilir.
Olası bir geçici çözüm, her çerezi hem yeni hem de eski tarzda ayarlamaktır:
Set-cookie: 3pcookie=value; SameSite=None; Secure
Set-cookie: 3pcookie-legacy=value; Secure
Yeni davranışı uygulayan tarayıcılar, çerezi SameSite
değeriyle ayarlar. Yeni davranışı uygulamayan tarayıcılar bu değeri yoksayar ve 3pcookie-legacy
çerezini ayarlar. Dahil edilen çerezleri işlerken, siteniz öncelikle yeni çerez stilinin olup olmadığını kontrol etmeli, ardından yeni bir çerez bulamazsa eski çerezi kullanmaya çalışmalıdır.
Aşağıdaki örnekte, Express çerçevesi ve cookie-parser ara yazılımı kullanılarak bunun Node.js'de nasıl yapılacağı gösterilmektedir:
const express = require('express');
const cp = require('cookie-parser');
const app = express();
app.use(cp());
app.get('/set', (req, res) => {
// Set the new style cookie
res.cookie('3pcookie', 'value', { sameSite: 'none', secure: true });
// And set the same value in the legacy cookie
res.cookie('3pcookie-legacy', 'value', { secure: true });
res.end();
});
app.get('/', (req, res) => {
let cookieVal = null;
if (req.cookies['3pcookie']) {
// check the new style cookie first
cookieVal = req.cookies['3pcookie'];
} else if (req.cookies['3pcookie-legacy']) {
// otherwise fall back to the legacy cookie
cookieVal = req.cookies['3pcookie-legacy'];
}
res.end();
});
app.listen(process.env.PORT);
Bu yaklaşım, gereksiz çerezleri ayarlama ve hem çerezi ayarlama hem de okuma noktasında değişiklik yapma konusunda ek çalışma yapmanızı gerektirir. Ancak bu, davranışlarından bağımsız olarak tüm tarayıcıları kapsayacak ve üçüncü taraf çerezlerinin çalışmasını sağlayacaktır.
Alternatif olarak, Set-Cookie
başlığı gönderildiğinde kullanıcı aracısı dizesini kullanarak istemciyi algılayabilirsiniz. Uyumsuz istemcilerin listesine bakın ve platformunuza uygun bir kullanıcı aracısı algılama kitaplığı (ör. Node.js'deki ua-parser-js kitaplığı) kullanın. Bu yaklaşımda yalnızca bir değişiklik yapmanız gerekir ancak kullanıcı aracısı koku alma işlemi, etkilenen tüm kullanıcıları yakalamayabilir.
Dillerde, kitaplıklarda ve çerçevelerde SameSite=None
desteği
Dillerin ve kitaplıkların çoğu, çerezler için SameSite
özelliğini destekler. Ancak SameSite=None
'ün eklenmesi nispeten yakın zamanda olduğu için şimdilik bazı standart davranışlardan kaçınmanız gerekebilir.
Bu davranışlar, SameSite
GitHub'daki örnekler deposunda açıklanmıştır.
Yardım alma
Çerezler web'in her yerinde kullanılır ve özellikle siteler arası kullanım alanlarında, geliştirme ekiplerinin sitelerinin çerezleri nerede ayarlayıp kullandığı hakkında tam bilgiye sahip olması nadirdir. Karşılaştığınız sorun, ilk kez karşılaşılan bir sorun olabilir. Bu nedenle, bizimle iletişime geçmekten çekinmeyin:
- GitHub'daki
SameSite
örnekler deposunda sorun bildirin. - StackOverflow'da "samesite" etiketiyle soru sorun.
- Chromium'un davranışıyla ilgili sorunlar için Chromium sorun izleyicisinde hata kaydı oluşturun.
- Chrome'un ilerleme durumunu
SameSite
güncellemeleri sayfasında takip edebilirsiniz.