SameSite kurabiye tarifleri

Chrome, Firefox, Edge ve diğerleri, IETF teklifi olan Incrementally Better Cookies'e uygun olarak varsayılan davranışlarını değiştiriyor. Bu değişiklikler sonucunda:

  • SameSite özelliği olmayan çerezler SameSite=Lax olarak değerlendirilir. Bu nedenle, varsayılan davranış çerezleri yalnızca birinci taraf bağlamlarıyla sınırlandırmaktır.
  • Siteler arası kullanım için çerezler, üçüncü taraf bağlamına dahil edilmeyi sağlamak üzere SameSite=None; Secure değerini belirtmelidir.

Henüz yapmadıysanız üçüncü taraf çerezlerinizin özelliklerini güncelleyerek gelecekte engellenmelerini önlemeniz gerekir.

Browser Support

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

Source

Siteler arası veya üçüncü taraf çerezlerinin kullanım alanları

Çerezlerin üçüncü taraf bağlamında gönderilmesi gereken yaygın kullanım alanları ve kalıplar vardır. Bu kullanım alanlarından birini sağlıyor veya bunlardan yararlanıyorsanız hizmetin düzgün şekilde çalışmaya devam etmesi için çerezlerinizi güncellediğinizden veya sağlayıcının çerezlerini güncellediğinden emin olun.

<iframe> içindeki içerikler

<iframe> içinde gösterilen farklı bir siteden gelen 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 randevu özellikleri gibi harici hizmetlerin widget'ları.
  • Sosyal medya düğmeleri veya sahtekarlık karşıtı hizmetler gibi daha az belirgin <iframes> oluşturan widget'lar.

Çerezler burada 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 amaçlarla kullanılabilir.

Yerleştirilmiş içeriğin URL&#39;sinin sayfanın URL&#39;siyle eşleşmediği bir tarayıcı penceresinin şeması.
Yerleştirilmiş içerik, üst düzey göz atma bağlamıyla aynı siteden gelmiyorsa üçüncü taraf içeriğidir.

Web'in doğası gereği birleştirilebilir olması nedeniyle, üst düzey veya birinci taraf bağlamında görüntülenen içeriği yerleştirmek için de <iframes> kullanılır. iFrame'de gösterilen sitenin kullandığı 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 geri dönebileceğinizden de emin olmanız gerekir.

Siteler arası "güvenli olmayan" istekler

Burada "güvenli değil" ifadesi endişe verici gibi görünse de durumu değiştirmeyi amaçlayan tüm istekleri ifade eder. Web'de bu istekler genellikle 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öntemi kullanılarak farklı bir siteye gönderilen <form> gibi işlemler çerez içermez.

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

Bu kalıp, kullanıcıyı geri dönmeden önce bazı işlemleri gerçekleştirmek için uzak bir hizmete yönlendirebilen sitelerde (ör. üçüncü taraf kimlik sağlayıcıya yönlendirme) kullanılır. Kullanıcı siteden ayrılmadan önce, siteler arası istek sahteciliği (CSRF) saldırılarını azaltmak için geri gelen istekte bu jetonun kontrol edilebileceği beklentisiyle tek kullanımlık jeton içeren bir çerez ayarlanır. Bu geri dönen istek POST üzerinden gelirse çerezleri SameSite=None; Secure olarak işaretlemeniz gerekir.

Uzak kaynaklar

Bir sayfadaki tüm uzak kaynaklar (ör. <img> veya <script> etiketleri) bir istekle birlikte çerezlerin gönderilmesine bağlı olabilir. Yaygın kullanım alanları arasında izleme pikselleri ve içeriği kişiselleştirme yer alır.

Bu durum, fetch veya XMLHttpRequest kullanarak JavaScript'inizden gönderilen istekler için de geçerlidir. fetch(), credentials: 'include' seçeneğiyle çağrılırsa bu istekler büyük olasılıkla çerez içerir. XMLHttpRequest için beklenen çerezler genellikle true için withCredentials değeriyle gösterilir. Bu çerezler, siteler arası isteklere dahil edilmek üzere uygun şekilde işaretlenmelidir.

WebView'daki içerik

Platforma özgü bir uygulamadaki WebView, bir tarayıcı tarafından desteklenir. Geliştiricilerin, uygulamalarını etkileyen kısıtlamaların veya sorunların uygulamalarının WebView'ları için de geçerli olup olmadığını test etmesi gerekir.

Android ayrıca platforma özel uygulamalarının CookieManager API'yi kullanarak doğrudan çerez ayarlamasına da olanak tanır. Başlıklar veya JavaScript kullanılarak ayarlanan çerezlerde olduğu gibi, siteler arası kullanım için tasarlanmışlarsa SameSite=None; Secure özelliğini eklemeyi düşünebilirsiniz.

SameSite'yı bugün nasıl uygulayabilirsiniz?

Yalnızca birinci taraf bağlamında gerekli olan çerezleri, ihtiyaçlarınıza bağlı olarak SameSite=Lax veya SameSite=Strict olarak işaretleyin. Bu çerezleri işaretlemez ve bunların işlenmesi için varsayılan tarayıcı davranışına güvenirseniz çerezler tarayıcılar arasında tutarsız şekilde davranabilir ve her çerez için konsol uyarıları tetikleyebilir.

Set-Cookie: first_party_var=value; SameSite=Lax

Üçüncü taraf bağlamında gereken çerezleri SameSite=None; Secure olarak işaretlediğinizden emin olun. Her iki özellik de gereklidir. Secure olmadan yalnızca None değerini belirtirseniz çerez reddedilir. Tarayıcı uygulamalarındaki farklılıkları hesaba katmak için Uyumlu olmayan istemcileri işleme başlıklı makalede açıklanan azaltıcı stratejilerden bazılarını kullanmanız gerekebilir.

Set-Cookie: third_party_var=value; SameSite=None; Secure

Uyumsuz istemcileri işleme

None ekleme ve varsayılan davranışı güncelleme gibi 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 liste kapsamlı olmayabilir.

Olası bir geçici çözüm, her çerezi hem yeni hem de eski stilde ayarlamaktır:

Set-cookie: 3pcookie=value; SameSite=None; Secure
Set-cookie: 3pcookie-legacy=value; Secure

Daha 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. İşleme çerezler dahil edildiğinde siteniz önce yeni stil çerezin varlığını kontrol etmeli, ardından yeni bir çerez bulamazsa eski çereze geri dönmelidir.

Aşağıdaki örnekte, Express framework ve cookie-parser ara yazılımı kullanılarak Node.js'de bu işlemin 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, yedekli çerezler ayarlama ve hem çerezi ayarlama hem de okuma noktasında değişiklik yapma konusunda ek çalışma yapmanızı gerektirir. Ancak, davranışlarından bağımsız olarak tüm tarayıcıları kapsamalı ve üçüncü taraf çerezlerinin çalışmaya devam etmesini sağlamalıdır.

Alternatif olarak, Set-Cookie üstbilgisi gönderildiğinde kullanıcı aracısı dizesini kullanarak istemciyi algılayabilirsiniz. Uyumsuz istemciler listesine bakın ve platformunuz için uygun bir kullanıcı aracısı algılama kitaplığı kullanın. Örneğin, Node.js'de ua-parser-js kitaplığını kullanabilirsiniz. Bu yaklaşım yalnızca bir değişiklik yapmanızı gerektirir ancak kullanıcı aracısı koklama, etkilenen tüm kullanıcıları yakalamayabilir.

Dillerde, kitaplıklarda ve çerçevelerde SameSite=None desteği

Çoğu dil ve kitaplık, çerezler için SameSite özelliğini destekler. Ancak SameSite=None özelliğinin eklenmesi henüz nispeten yeni olduğundan şimdilik bazı standart davranışları atlamanız gerekebilir. Bu davranışlar, SameSiteGitHub'daki örnekler deposunda belgelenmiştir.

Yardım alma

Çerezler web'in her yerinde kullanılır ve özellikle siteler arası kullanım alanlarında, herhangi bir geliştirme ekibinin sitesinin bunları nerede ayarladığı ve kullandığı hakkında tam bilgi sahibi olması nadirdir. Karşılaştığınız sorun, daha önce kimsenin karşılaşmadığı bir sorun olabilir. Bu nedenle, bizimle iletişime geçmekten çekinmeyin: