Google Chrome SameSite Problemi Nasıl Çözülür?

Chorme 80. versiyon üstü SameSite Problemi ve Çözümü

Same Site Problemi Nedir ?

Google Chrome tarayıcılarında 80 versiyon üstü kullanan kullanıcıların sameSite=None ve secure olarak tanımlanmamış cookiler varsayılan olarak sameSite=Lax(first-party cookie) kabul edilecektir. Bu da first-party cookielere tanımlanan web sitesi / Host üzerinden erişilmesine izin verilmektedir. Sitenize cross-site request olması durumunda ki 3Ds Secure işlemi farklı bir web sitesinin size POST isteği olarak dönüş yapılmakta ve bu dönüş sonunda browser üzerinde cookie erişimi güvenlik sebebiyle kısıtlanmaktadır. Kısacası Farklı bir domain üzerinden gelecek POST işlemlerinin kısıtlanması anlmına gelmektedir.

Google Chrome belirli aralıklar ile belirli kullanıcılara bu güncellemeyi uyguladı son güncelleme ile kullanıcı sayısı yükseldi. Bu link üzerinden kontrol edebilirsiniz.

Bu güvenlik güncellemesi belirli aralıklar ile tüm kullanıcılara ulaşana kadar devam edecektir. Burada esas olan Chrome geri dönüş ve bug bildirimlerini alarak gerekli güncellemeleri sağlaması.

Ekleme: Son güncelleme 11 Ağustos ta yapılmış olup bu güvenlik güncellemesini kullanan kullanıcıların sayısını %100' e çıkardığını hala kullanan tarayıcıların kapatıp açıldıktan sonra güncel hali ile açılacağını duyurmuştur.

Örnek Senaryo

Kullandığınız yazılım dili fark etmeksizin web siteniz için senaryo; müşteriniz web site adresine giriş yapar ister guest ister kayıtlı kullanıcı olsun almak istediği ürünü sepete ekler veya direk ödeme seçeneğini ile checkout sayfasına yönlenir. Adres bilgilerini girdikten sonra weepay form için istek oluşur bu istek sonucu response ile weepay formu oluşur. Ancak bu esnada Chrome sizin için bir Cookie oluşturacaktır. İster Oturum bilgisi ister Id bilgisi olursa olsun 3Ds dönüşü bu bilgilere ulaşmak isteyecekseniz. Kullanıcı weepay Form üzerindeki "Ödeme Yap" butonuna bastığında 3Ds için Banka Sayfasına Yönlendiğinde artık Domain değişmiş olur geri size POST olarak işlem döndüğünde gerekli oturuma veya sepet bilgisine ulaşmak için siteniz Cookie veya Session değerlerini ihtiyaç duyuyor ise sorgulayacaktır. Eğer cookie sameSite=None ve secure olarak tanımlanmamışsa Chrome bu cookielerin okunmasına izin vermez. Gerekli update ve ödeme kaydı işlemlerini tamamlayamamış veya hata sayfasına yönlenmiş olacaktır.

callBackUrl adresinde, cookie veya Session erişimi ile ödeme update ve confirm işlemlerinizi yapıyorsanız cookieyi SameSite=None olarak tanımlamanız gerekmektedir.

Örnek Kodlar

JavaScript
NodeJs
.NET
PHP
JavaScript
//cross-site cookie for third-party contexts
//
document.cookie = 'cookie2=value2; SameSite=None; Secure';
NodeJs
//cross-site cookie for third-party contexts
response.cookie('cookie2', 'value2', { sameSite: 'none', secure: true });
.NET
// ASP.NET 4.7.2+
Response.Cookies.Add(new HttpCookie("key", "value")
{
SameSite = SameSiteMode.None,
Secure = true,
});
// ASP.NET Core 2.1+
Response.Cookies.Append("Key", "Value", new CookieOptions()
{
SameSite = SameSiteMode.None,
Secure = true,
});
PHP
// PHP 7.3 İçin Örnek Tanımlanması
// Set a cross-site cookie for third-party contexts
setcookie('cross-site-cookie', 'bar', ['samesite' => 'None', 'secure' => true]);
//7.3 Öncesi Sürümler İçin
header('Set-Cookie: cross-site-cookie=bar; SameSite=None; Secure');
//
setcookie("Key", "value", "expire time", "path; samesite=None", domain, true, true);

Key Value Değerlerinin Belirlenmesi

Cookie ile ilgili key value değerleri için örneğin PHP standart olarak PHPSESSID olarak tanımlar eğer standart olarak kullanmadıysanız kendi key değerinizi giriniz. value olarakta $_COOKIE['PHPSESSID']; değeri belirterek SameSite=None olarak işaretlemelisiniz. Tarayıcınızda görüntülemek için Application bölümünde bulunan Cookie bölümünün altından web site adresini seçerek aşağıdaki ekran görüntüsündeki alana ulaşabilirsiniz.

Ekran Görüntüsü

Ekran görüntüsünde de görüleceği gibi PHPSESSID değeri key value'daki değerde value olarak tanımlanmalıdır.