23 Eylül 2020 Çarşamba

Çerezler Gerçekten Ne Kadar Tehlikeli ?


SameSite Cookie’den bahsetmeden önce daha iyi anlaşılması için HTTP protokolü ve cookie’nin ne olduğundan kısaca bahsedebiliriz. HTTP protokolü, web üzerindeki uygulamalar ile iletişim kurmamızı sağlayan protokoldür ve çalışma mantığı basittir. HTTP protokolü stateless (durum bilgisini tutmayan) bir protokoldür bu yüzden de bazı işlemler yaparken: örneğin, bir siteye giriş işlemi gerçekleştirdikten sonra sayfayı yenilediğimizde web sitesi bizi tanımayacaktır. Bunu önlemek içinde cookie’ler geliştirilmiştir. Bir sitede gezinirken giden isteğin header kısmında “Set-Cookie” olarak tanımlanan bu parametre siteye ulaşmaya çalışıldığında karşı tarafa gönderilir ve bu sayede site tarafından tanınmış oluruz.

Tarayıcılara eklenen SameSite Cookie özelliği de cookie’lerin 3. taraflardan kaynaklanan istekler ile bizim domainimiz dışındaki başka bir domaine ait istekler ile gönderilip gönderilmeyeceğini belirlemek için kullanılmaktadır.


SameSite Cookie özelliği strict, lax ve none olmak üzere 3 şekilde set edilebilmektedir;

Strict: SameSite Cookie özelliğinin strict olarak tanımlanması, farklı bir site üzerinden yapılan istekte cookie’lerin gönderilmeyeceğini belirtmektedir.

None: SameSite Cookie none olarak tanımlanırsa, tüm bağlantılar tarafından cookie’lerin gönderileceği anlamına gelmektedir.

Lax: SameSite Cookie’nin lax olarak tanımlanmasında ise diğer sayfalar yani 3.taraflar tarafından yapılan GET isteklerinde cookie’ler gönderilmektedir fakat kritik istekler olan POST, PUT, DELETE gibi kritik isteklerde cookie gönderilmesine izin verilmemektedir.


Daha iyi açıklamak için şöyle bir örnek verebiliriz. deneme.com/index.html adında bir sayfa oluşturulup, içeriğine <img src=google.com/samesite.png> şeklinde bir resim tag’i eklenilsin. Bu siteye URL üzerinden deneme.com/index.html yazarak gidilirse ve SameSite Cookie none olarak tanımlanmışsa cookie’ye istek gönderilecektir. Cookie, lax veya strict olarak tanımlanmış ise cookie iletimi olmayacaktır. Fakat URL kısmına google.com/samesite.png yazılırsa bu sefer lax olarak set edilen cookie de gönderilecektir. Bunun sebebi ise img tag’i GET isteği yollamaktadır fakat bu GET isteği URL üzerinde bir değişiklik yaratmadığı için cookie gönderilmektedir.


Bu kısımda görüldüğü gibi SameSite Cookie’yi strict olarak tanımlanırsa hiçbir zaman cookie gönderilmeyecektir ve cookie iletimi güvenli olacaktır. Fakat bu da bazı sorunları beraberinde getirmektedir. 


Header üzerinde örnek bir cookie tanımı yapılması;

“Set-Cookie: aspCookie=deneme; SameSite=Lax;”

Header üzerinde yukarıdaki şekilde SameSite Cookie tanımlanabilmektedir.


SameSite Cookie’nin çıkmasının sebebi CSRF’in (Cross Site Request Forgery, siteler arası istek sahteciliği) önüne geçmektedir. Örnek olarak; satınal.com tarzında bir siteye giriş yapıldığında, giriş yapan kullanıcıya bir cookie tanımlanmaktadır. Sonrasında bu kullanıcı farklı bir sekmede zararlı.com’a giriş yaparken bu site satınal.com üzerinden yeni parola tanımlama işlemi için istek atabilmektedir. SameSite Cookie özelliği ise burada devreye girmektedir. Yapılan istek için cookie gönderilmeyeceğinden parola değiştirme işlemi de gerçekleşmeyecektir.


Peki neden tüm SameSite Cookieler strict ile set edilmemektedir? Aslında bu noktada bankalar gibi önemli veri saklayan ve diğer siteler ile iletişim kurma gereksinimi olmayan yerlerde strict kullanılabilmektedir. Fakat Twitter gibi bir site strict ile set edildiğinde bazı problemler ortaya çıkmaktadır. Örneğin bir kullanıcı blog.btyon.com.tr üzerinden okuduğu bir yazıyı çok beğenip bunu Twitter üzerinden paylaşmak isteyebilmektedir. Fakat kullanıcı bu yazıyı paylaş butonuna bastığı zaman tekrardan Twitter’a giriş yapması gerekir. Bu durumun önüne geçmek adına SameSite Cookie lax olarak tanımlanmaktadır. Bu durum bir siteye Twitter ile giriş yapılmak istendiğinde de geçerlidir.


Kısaca SameSite Cookie sayesinde CSRF zafiyeti olabildiğince az seviyeye indirilmekte ve cookie’ler güvenli bir şekilde gönderilmektedir.

Hiç yorum yok:

Yorum Gönder