SameSite kurabiye tarifleri

Chrome, Firefox, Edge ve diğerleri varsayılan davranışını IETF teklifi olan Artımlı Daha İyi Çerezler'e göre değiştiriyor. Böylece:

  • SameSite özelliği olmayan çerezler SameSite=Lax olarak değerlendirilir. Bu durumda, varsayılan davranış, çerezleri yalnızca birinci taraf bağlamlarıyla kısıtlamaktır.
  • Siteler arası kullanıma yönelik çerezlerin, üçüncü taraf bağlamına dahil edilmesini sağlamak için SameSite=None; Secure değeri belirtilmelidir.

Henüz yapmadıysanız, ileride engellenmemeleri için üçüncü taraf çerezlerinize ilişkin özellikleri güncellemeniz gerekir.

Tarayıcı Desteği

  • 51
  • 16
  • 60
  • 13

Kaynak

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

Çerezlerin üçüncü taraf bağlamında gönderilmesini gerektiren çeşitli yaygın kullanım durumları ve kalıplar vardır. Bu kullanım alanlarından birini sağlıyorsanız veya ona bağlıysanız hizmetin doğru şekilde çalışmaya devam etmesi için sizin ya da sağlayıcının çerezlerini güncellediğinizden emin olun.

<iframe> içindeki içerik

<iframe> içinde gösterilen farklı bir siteden gelen içerik, üçüncü taraf bağlamındadır. Standart kullanım alanları aşağıdakileri içerir:

  • Diğer sitelerden paylaşılan videolar, haritalar, kod örnekleri ve sosyal medya yayınları gibi yerleştirilmiş içerikler.
  • Ödemeler, takvimler, rezervasyon ve rezervasyon özellikleri gibi harici hizmetlerden widget'lar.
  • Daha az belirginlik oluşturan sosyal düğmeler veya sahtekarlık önleme hizmetleri gibi widget'lar <iframes>.

Çerezler başka işlerin yanı sıra oturum durumunu korumak, genel tercihleri depolamak, istatistikleri etkinleştirmek veya mevcut hesapları olan kullanıcılar için içeriği kişiselleştirmek amacıyla kullanılabilir.

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

Web, yapısı gereği derleme yapılabildiği için <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. iframe'de görüntülenen sitenin kullandığı tüm çerezler, üçüncü taraf çerezleri olarak kabul edilir. Diğer sitelerin yerleştirmesini istediğiniz siteler oluşturuyorsanız ve bu sitelerin çalışması için çerezlere ihtiyacınız varsa, bunların siteler arası kullanım için işaretlendiğini veya bunlar olmadan sorunsuz şekilde geri çekilebilmenizi de sağlamanız gerekir.

Siteler genelinde "güvenli olmayan" istekler

Burada "güvenli değil" ifadesi kulağa endişe verici gelebilir, ancak durumunu değiştirmesi beklenen tüm istekleri ifade eder. Web'de bunlar öncelikli olarak POST istekleridir. SameSite=Lax olarak işaretlenen çerezler, farklı bir siteye gitmek için bir bağlantıyı tıklama gibi güvenli üst düzey gezinmelerde gönderilir. Ancak POST kullanarak farklı bir siteye yapılan <form> gönderimi gibi bir şey çerez içermez.

Bir sayfadan diğerine geçiş yapan bir isteği gösteren diyagram.
Gelen istek "güvenli" bir yöntem kullanıyorsa sayfa, çerezleri gönderir.

Bu kalıp, geri dönmeden önce bir işlem yapması (ör. üçüncü taraf kimlik sağlayıcısına yönlendirme) amacıyla kullanıcıyı uzak bir hizmete yönlendirebilen siteler için kullanılır. Kullanıcı siteden ayrılmadan önce, Siteler Arası İstek Sahtekarlığı (CSRF) saldırılarını azaltmak amacıyla bu jetonun geri gelen istekte kontrol edilebileceği beklentisiyle, tek kullanımlık jeton içeren bir çerez ayarlanır. Bu geri dönüş isteği POST üzerinden gelirse çerezleri SameSite=None; Secure olarak işaretlemeniz gerekir.

Uzak kaynaklar

Bir sayfadaki <img> veya <script> etiketleri gibi uzak kaynaklar, istekle birlikte gönderilen çerezlere dayanarak olabilir. Yaygın kullanım alanları arasında izleme pikselleri ve içerik kişiselleştirme yer alır.

Bu durum, fetch veya XMLHttpRequest kullanılarak 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 çerezlerin, siteler arası isteklere dahil edilmeleri için uygun bir şekilde işaretlenmesi gerekir.

Web Görünümü'ndeki içerik

Platforma özgü uygulamalardaki bir 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 özel uygulamalarının çerezleri doğrudan CookieManager API'yi kullanarak ayarlamasına da izin veriyor. Üstbilgiler veya JavaScript kullanılarak ayarlanan çerezlerde olduğu gibi, siteler arası kullanım için tasarlanmışsa SameSite=None; Secure özelliğini eklemeyi düşünün.

SameSite nasıl uygulanır?

Yalnızca birinci taraf bağlamında ihtiyaç duyulan çerezleri, ihtiyaçlarınıza göre SameSite=Lax veya SameSite=Strict olarak işaretleyin. Bu çerezleri işaretlemez ve bunları işlemek için varsayılan tarayıcı davranışından yararlanırsanız çerezler, tarayıcılarda tutarsız davranabilir ve her bir çerez için konsol uyarılarını 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 zorunludur. Secure olmadan yalnızca None değerini belirtirseniz çerez reddedilir. Tarayıcı uygulamalarındaki farklılıkları hesaba katmak için Uyumsuz istemcileri işleme bölümünde açıklanan hafifletme stratejilerinden bazılarını kullanmanız gerekebilir.

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

Uyumsuz istemcileri işleyin

None öğesini eklemek ve varsayılan davranışı güncellemek için yapılan bu değişiklikler henüz nispeten yeni olduğundan farklı tarayıcılar bunları farklı şekillerde ele almaktadır. Bilinen sorunların listesini görmek için chromium.org adresindeki güncellemeler sayfasına göz atabilirsiniz ancak bu listede tüm örneklere yer verilmemiş olabilir.

Olası geçici çözümlerden biri, her bir çerezi hem yeni hem de eski stilde 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, sitenizin öncelikle yeni çerez stilinin olup olmadığını kontrol etmesi, ardından yeni bir çerez bulamaması durumunda eski çereze geri dönmesi gerekir.

Aşağıdaki örnekte, Express çerçevesi ve onun cookie-parser ara yazılımı kullanılarak Node.js'de bunun 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, fazladan çerezler ayarlamak ve hem çerezi ayarlamak hem de çerezi okumak sırasında değişiklik yapmak için fazladan çalışma yapmanızı gerektirir. Ancak, davranışları ne olursa olsun tüm tarayıcıları kapsamalı ve üçüncü taraf çerezlerinin çalışmaya devam etmesini sağlamalıdır.

Alternatif olarak, Set-Cookie başlığı gönderildiğinde kullanıcı aracısı dizesini kullanarak istemciyi tespit edebilirsiniz. Uyumsuz istemcilerin listesine bakın ve platformunuz için uygun bir kullanıcı aracısı algılama kitaplığı (ör. Node.js'deki ua-parser-js kitaplığı) kullanın. Bu yaklaşım yalnızca tek bir değişiklik yapmanızı gerektirir ancak kullanıcı aracısı yoklama yöntemi, etkilenen tüm kullanıcıları yakalamayabilir.

Diller, kitaplıklar ve çerçevelerde SameSite=None desteği

Dillerin ve kitaplıkların çoğu çerezler için SameSite özelliğini destekler. Ancak, SameSite=None eklenmesi hâlâ nispeten yeni olduğundan, şimdilik bazı standart davranışlara geçici bir çözüm bulmanız gerekebilir. Bu davranışlar, GitHub'daki SameSite örnek deposunda belgelenmiştir.

Yardım alma

Çerezler web'de her yerde kullanılır ve sitelerinin özellikle siteler arası kullanım durumlarında bunları nerede ayarladığı ve kullandığı konusunda tam bilgi sahibi olan geliştirme ekiplerine çok nadir rastlanır. Bir sorunla ilk defa karşılaşmış olabilirsiniz. Bu nedenle bize ulaşmaktan çekinmeyin: