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, gelecekte engellenmeyecekleri şekilde güncellemeniz gerekir.

Tarayıcı desteği

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

Kaynak

Siteler arası veya üçüncü taraf çerezlerinin 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 hizmetlerden alınan widget'lar.
  • Sosyal medya düğmeleri veya sahtekarlık karşıtı hizmetler gibi daha az belirgin bir deneyim oluşturan 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 burada kullanılabilir.

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

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. 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 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 arasında "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, Siteler Arası İstek Sahteciliği (CSRF) saldırılarını azaltmak için döndürülen istekte kontrol edilebileceği beklentisiyle tek kullanımlık bir jeton içeren bir çerez ayarlanır. Döndürülen 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 withCredentials değeri ile belirtilir. Bu çerezler, siteler arası isteklere dahil edilmek için uygun şekilde işaretlenmelidir.

WebView'deki içerik

Platforma özgü bir uygulamadaki WebView, tarayıcı tarafından desteklenir. Geliştiricilerin, uygulamalarını etkileyen kısıtlamaların veya sorunların uygulamalarının WebView'leri için de geçerli olup olmadığını test etmesi 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 ihtiyaç duyulan tüm ç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 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'ü dahil etme ve varsayılan davranışı güncellemeyle ilgili bu değişiklikler henüz 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 eksik 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

Daha yeni davranışı uygulayan tarayıcılar, çerezi SameSite değerine ayarlar. Yeni davranışı uygulamayan tarayıcılar bu değeri yok sayar ve 3pcookie-legacy çerezini ayarlar. Siteniz, dahil edilen çerezleri işlerken önce yeni stil çerezin varlığını kontrol etmeli, ardından yeni bir çerez bulamadığı takdirde eski çereze geri dönmelidir.

Aşağıdaki örnekte, Express çerçevesi ve 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, 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. Uyumlu olmayan istemcilerin listesine bakın ve platformunuz için uygun bir kullanıcı aracısı algılama kitaplığı kullanın (ör. Node.js'deki ua-parser-js kitaplığı). 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: