SameSite kurabiye tarifleri

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 çerezler SameSite=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.

Tarayıcı desteği

  • Chrome: 51.
  • Edge: 16.
  • Firefox: 60.
  • Safari: 13.

Kaynak

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.

Yerleştirilmiş içeriğin URL&#39;sinin, sayfanın URL&#39;si ile eşleşmediği tarayıcı penceresinin şeması.
Yerleştirilmiş içerik, üst düzey tarama bağlamıyla aynı siteden alınmıyorsa üçüncü taraf içeriktir.

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.

Bir sayfadan diğerine taşınan isteğin şeması.
Gelen istek "güvenli" bir yöntem kullanıyorsa sayfa çerez gönderir.

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, SameSiteGitHub'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: