İletişim

SameSite Çerez Özniteliği Nedir?

Kısa tanım

SameSite, bir çerezin başka bir siteden başlatılan isteklere eklenip eklenmeyeceğini belirleyen Set-Cookie özniteliğidir. Strict değeri çerezi yalnızca aynı siteden gelen isteklere ekler, Lax üst düzey gezinmelerde güvenli metotlara da izin verir, None ise her isteğe ekler ve Secure gerektirir. Siteler arası istek sahteciliğine (CSRF) karşı önemli bir savunma katmanıdır ama tek başına yeterli değildir.

Diğer adları: SameSite, SameSite cookie, SameSite=Lax, SameSite=Strict, SameSite=None

SameSite çerez özniteliğinin Strict, Lax ve None değerlerinde çerezin hangi siteler arası isteklerde gönderildiğini gösteren tablo

Sorun: tarayıcı çerezi her isteğe ekliyordu

Tarayıcı, bir alan adına ait çerezleri o alan adına giden isteklere otomatik olarak ekler. Uzun yıllar boyunca bu isteğin kendi sitenizden mi, yoksa başka bir sitedeki form veya görsel etiketi tarafından mı başlatıldığı fark etmiyordu. CSRF saldırılarının dayandığı zayıflık buydu: kullanıcı başka bir sitedeyken, o site sizin sitenize oturum çerezini taşıyan bir istek gönderebiliyordu. SameSite, sunucunun “bu çerezi siteler arası isteklere ekleme” diyebilmesini sağlar.

Üç değer ve davranışları

DeğerÇerez ne zaman gönderilir?Tipik kullanım
StrictYalnızca isteği aynı site başlattığında. Başka bir siteden gelen bağlantıya tıklayarak gelinse bile ilk istekte gönderilmez.Hassas işlem çerezleri, yönetim panelleri
LaxAynı site isteklerinde ve başka siteden gelen, üst düzey (adres çubuğunu değiştiren) ve güvenli metotlu (GET gibi) gezinmelerdeÇoğu sitenin oturum çerezi
NoneHer durumda; Secure özniteliği zorunludurBaşka sitelere gömülen widget'lar, siteler arası entegrasyonlar
Set-Cookie: oturum=a3f9c1; Path=/; Secure; HttpOnly; SameSite=Lax
Set-Cookie: widget_tercih=koyu; Path=/; Secure; SameSite=None

Burada “site” kavramı origin'den daha geniştir: şema ile kayıtlı alan adı (örneğin https ve example.com) aynıysa, shop.example.com ile blog.example.com aynı site sayılır. Bu yüzden SameSite, kendi alt alan adlarınızdan gelen isteklere karşı koruma sağlamaz; ele geçirilmiş ya da güvensiz bir alt alan adı hâlâ “aynı site”dir.

Varsayılan davranış tarayıcıya göre değişiyor

SameSite belirtilmediğinde ne olacağı tüm tarayıcılarda aynı değildir. MDN'in tarayıcı uyumluluk verisine göre Chrome 80 ve Edge 86'dan itibaren Chromium tabanlı tarayıcılar, özniteliği olmayan çerezlere varsayılan olarak Lax uygular. Firefox'ta bu davranış yalnızca bir ayarla açılabiliyor, Safari'de ise varsayılan olarak yok. Ayrıca Chromium'un varsayılan Lax'ı biraz daha gevşektir: yeni ayarlanmış çerezler, ayarlandıktan sonraki iki dakika içinde siteler arası POST isteklerine de eklenebilir. Pratik sonuç şu: Varsayılana güvenmeyin, özniteliği her çerezde açıkça yazın.

Gerçek hayatta en sık karşılaşılan sorun

SameSite'ı sıkılaştıran ekiplerin sık yaşadığı bir sürpriz, ödeme akışlarında ortaya çıkar. 3D Secure doğrulamasında kullanıcı bankanın sayfasında şifresini girer ve banka, kullanıcıyı sitenize çoğu zaman siteler arası bir POST isteğiyle geri gönderir. Oturum çerezi Strict ya da Lax ise bu istekte gönderilmez; uygulama kullanıcıyı oturumu kapanmış sanar ve sipariş eşleşmez. Çözüm genellikle oturumu None'a açmak değil, dönüş adresinin sipariş kimliği ve imzalı parametrelerle oturumdan bağımsız çalışmasını sağlamaktır.

Benzer şekilde, sitesinin başka sitelerde iframe içinde çalışmasını bekleyen ürünler (gömülü sohbet, yorum, ödeme widget'ları) SameSite=None; Secure kullanmak zorundadır ve bu çerezler, tarayıcıların üçüncü taraf çerez kısıtlamalarından ayrıca etkilenir.

Savunmadaki yeri

SameSite, CSRF'e karşı güçlü bir ek katmandır ama CSRF token'larının veya Origin başlığı kontrolünün yerini tamamen tutmaz: eski tarayıcılar, aynı site sayılan alt alan adları ve durum değiştiren GET uç noktaları gibi boşluklar kalır. Oturum çerezleri için makul bir varsayılan Secure; HttpOnly; SameSite=Lax kombinasyonudur; HttpOnly çerezi JavaScript'ten gizlerken SameSite hangi isteklere ekleneceğini sınırlar.

İlgili terimler

← Sözlüğe dön