HTTP cookie nedir, hangi amaçlarla ve nasıl kullanılır?
Bu flood’da HTTP cookie’leri tanıtarak bazı basit kullanım alanlarından bahsedeceğim.
Bilindiği gibi HTTP stateless
bir protokoldür. HTTP protokolü, web istemciyi ve sunucuyu sonraki istekler ve cevaplarda kullanılmak üzere protokol seviyesinde bir state
(durum bilgisi) tutmasını şart koşmaz. Bununla birlikte web uygulamalarında durumu bilgisini tutmaya ihtiyacımız vardır. Örneğin, kullanıcı uygulamaya parolası ile giriş yaptıktan sonra ziyaret ettiği diğer sayfalarda kullanıcıya tekrar tekrar kullanıcı adı ve parolasını sormak istemeyiz. Kullanıcının önceden uygulamaya giriş yaptığını bilerek onu tanımamız gerekir.
HTTP cookie’lerin bir kullanım amacı yukarıda belirtilen ihtiyacı karşılamaktır. Web sunucu, kendisi ile iletişim kuran tarayıcılara onları birbirinden ayırmak için birer session
açar. Sunucu, kendi tarafında tuttuğu Session Id
bilgisini aynı tarayıcının diğer isteklerinde de ayırt edebilmek için şifreleyerek tarayıcıya vereceği HTTP cevabın Cookie
bölümüne ekler. Tarayıcı bu cookie'yi alır ve web sunucuya göndereceği bütün isteklerde HTTP header'larına ekler. Böylece sunucu gelen istekteki cookie'yi deşifre ederek session
bilgisini edinmiş olur.
Yukarıda anlatılan cookie’lere Session Cookie
denir. Aşağıdaki iki ekran görüntüsünde, HTTP header'ında sunucudan Set-Cookie
header'ı ile gelen cookie'nin sonraki istekte tarayıcı tarafından sunucuya tekrar gönderilmesi gösterilmiştir.
HTTP cevabında Set-Cookie
header'ında aşağıda görüldüğü gibi path
alanı bulunmaktadır. Bu alan tarayıcının hangi URL'ler için aldığı cookie'yi sunucuya geri göndermesi gerektiğini belirtmektedir. Örnekte path /
olduğu için cookie bütün isteklerde gönderilecektir.
Yukarıdaki örnekte path /
seçildiği için tarayıcı, aynı domain'e yaptığı js, css, imaj dahil bütün isteklerde header'a sakladığı cookie'yi ekleyecektir. Bu davranış verimlilik açısından hatalı gibi görünse de olanak tanıdığı kullanım alanları oldukça fazladır.
Yukarıda path
alanına ek olarak bir de httponly
alanının bulunduğunu görülüyor. Sunucu bu flag
'i kullanarak tarayıcıya ilgili cookie'ye JavaScript tarafından erişime izin verilmemesini salık vermektedir. Bu flag
ile cookie'nin XSS
yoluyla çalınmasının önüne geçilir. XSS
(Cross-site Scripting
) ile web uygulamasındaki bazı zafiyetler nedeniyle kötü amaçlı kişiler tarayıcı üzerinde kendi JS kodlarını çalıştırabilirler. httponly
ile JS'in ilgili cookie'yi okuması engellenir ve Session Cookie
, XSS
atağından korunmuş olur.
Anlaşılacağı üzere Session Cookie
'ler kullanıcının güvenle saklaması gereken bilgilerdir. Bu bilgiyi eline geçiren kötü amaçlı kişi, session'a erişim sağlayarak uygulama üzerinde Session Cookie
'nin gerçek sahibi gibi hareket edebilir. Buna Session Hijacking
adı verilir.
Tarayıcılar web uygulamalarında kullanılan cookie
'ler ve özelliklerinin derli toplu görülebileceği araçlara sahiptir. Aşağıda Chrome
'un ilgili domain'deki cookie'ler hakkında bilgi verdiği ekran gösterilmiştir.
Ekran görüntüsünde görülen secure
da path
ve httponly
gibi bir Set-Cookie
parametresidir. Sunucu bu direktifle tarayıcıya cookie'nin sadece HTTPS
üzerinden yapılan güvenli isteklerde gönderilmesi söyler, bu sayede cookie'nin ağı dinleyen kişilerce çalınması engellenir.
Şimdiye kadar hep Session Cookie
'lerden bahsettik ve bu cookie'lerin kaydedilmediğini ve browser kapanınca silindiğini belirttik. Session Cookie
'lerin aksine kullanıcı bilgisayarında uzun süre kaydedilen cookie'ler de vardır ve bunlara Persistent Cookie
denir.
Bir siteye giriş yaparken Beni Hatırla
kutucuğunu işaretlendiğinde web sunucunun verdiği cevapta Session Cookie
yerine Persistent Cookie
bulunur. Aşağıda, yukarıdaki örneklerde kullanılan web uygulamasına Beni Hatırla
ile giriş yapılmış ve Expire
bu kez yazılmıştır.
Persistent Cookie
'lerin bir kullanım alanı da kullanıcının dil tercihini saklamak ve sayfayı tercih edilen dilde göstermektir. Persistent Cookie
'ler sayesinde kullanıcı ilgili uygulamayı tekrar açtığında login olması (sunucunun tanıması) beklenmeden dil tercihine uyulabilir.
Persistence Cookie
'ler ile kullanıcıların web uygulaması üzerindeki davranışları takip edilebildiği için Tracking Cookie
olarak da adlandırılırlar. AB ülkelerinde uzun yıllardır, ülkemizde ise son zamanlarda yasa gereği kullanıcılardan bu cookie'ler için izin istenmektedir.
Hemen bir sonraki flood’da cookie’lerin web sunuculardaki Session
yönetiminde nasıl kullanıldığını, cookie'lerin web sunucu ve Load Balancer
(yük dağıtıcı)'da kullanılması ile elde edilen geniş ve ferah kullanım alanlarından bahsedeceğim.