SameSite problemi nedir

SameSite Problemi Nedir?

Google Chrome tarayıcılarında yapılan güncelleme ile sameSite=None ve secure olarak tanımlanmamış cookiler varsayılan olarak sameSite=Lax(first-party cookie) kabul edilecektir. Bu da first-party cookielere sadece tanımlanan domain/host üzerinden ulaşılabileceği anlamına gelmektedir. Sitenize cross-site request olması durumunda(örn:farklı bir domain üzerinden yapılan post isteği) browser üzerinde cookie erişimi güvenlik sebebiyle kısıtlanmaktadır.

Chrome güncelleme zamanları:

17 Şubat 2020'de sameSite güncellemesi belirli kullanıcılara açıldı. 2 Mart 2020'de güncelleme yapılan kullanıcı(browser) artırıldı. *9 Mart 2020'de güncelleme yapılan kullanıcı(browser) sayısı belirgin şekilde artırıldı.

Bu güncelleme tüm chrome tarayıcılarını kapsayacak şekilde kademeli olarak devam edecek. (Net tarih belli olmasa da Chrome bu noktada geri bildirimleri ve bugları da dikkate alıyor) Bununla birlikte diğer tarayıcıların da benzer güncelleme yapması bekleniyor.

SameSite problemi için örnek senaryo: Müşteri, üye iş yeri web sitesinde checkout sayfasına gelir. (üye iş yeri websitesi, müşterisi için bir cookie oluşturmuştur) Üye iş yeri, 3ds init isteği atar ve aldığı HTML içeriği yazdırarak müşterisini banka sayfasına yönlendirir(domain değişmiştir). Müşteri sms doğrulaması yapar. Banka müşteriyi iyzico'ya yönlendirir, iyzico ise üye iş yerinin sonuç sayfasına yönlendirme yapar. Bu sırada ödeme ile ilgili bilgileri bu adrese post metoduyla gönderir. Bu aşamada üye iş yeri sistemi, müşterisini tanımak veya sepeti kontrol etmek için cookie bilgisini sorgular. Eğer cookie sameSite=None ve secure olarak tanımlanmamışsa Chrome bu cookielerin okunmasına izin vermez. Üye iş yeri ödemenin kaydı için gerekli işlemleri yapamaz veya siparişi oluşturamaz.

SameSite problemi için çözüm : Eğer iyzico'nun yönlendirme yaptığı ve sonucu post ettiği callBackUrl adresinde, cookie erişimi ile süreci tamamlıyorsanız ilgili cookieyi SameSite=None olarak tanımlamanız gerekmektedir.

ASP.NET 4.7.2+ İÇİN ÖRNEK COOKIE TANIMLANMASI Response.Cookies.Add(new HttpCookie("key", "value") { SameSite = SameSiteMode.None, Secure = true, });

ASP.NET Core 2.1+ İÇİN ÖRNEK COOKIE TANIMLANMASI Response.Cookies.Append("Key", "Value", new CookieOptions() { SameSite = SameSiteMode.None, Secure = true, });

//**PHP 7.3 İÇİN ÖRNEK COOKIE TANIMLANMASI**
setcookie('same-site-cookie', 'foo', ['samesite' => 'Lax']);
setcookie('cross-site-cookie', 'bar', ['samesite' => 'None', 'secure' => true]);

//**PHP 7.3 ÖNCESİ SÜRÜMLER İÇİN ÖRNEK COOKIE TANIMLANMASI**
header('Set-Cookie: same-site-cookie=foo; SameSite=Lax');
header('Set-Cookie: cross-site-cookie=bar; SameSite=None; Secure');
//**ASP.NET 4.7.2+ İÇİN ÖRNEK COOKIE TANIMLANMASI**
Response.Cookies.Add(new HttpCookie("key", "value")
{
    SameSite = SameSiteMode.None,
    Secure = true,
});

//**ASP.NET Core 2.1+ İÇİN ÖRNEK COOKIE TANIMLANMASI**
Response.Cookies.Append("Key", "Value", new CookieOptions()
{
     SameSite = SameSiteMode.None,
     Secure = true,
});