Http Cookie

Cookie‘ler, kullanıcıların bilgisayarında bulunan, websitesinin yönetiminde olan(!), bilgi saklanan dosyalardır.

Cookie

Web siteleri genelde kullanıcıların bilgilerini hatırlamak için, kullanıcıların bilgisayarında cookie ler oluşturur. Daha sonra aynı siteyi ziyaret ettiğimizde tarayıcılar bunu HTTP Request mesajının içinde sunucuya gönderir.

Cookie’ler direk bilgi tutabileceği gibi, sunucudaki o kullanıcıya ait dosyayı bulabilmek için bir key de barındırıyor olabilir.

Cookie’ler bahsettiğimiz gibi sunucu kontrolündedir. Fakat bu kontrol, hayal ettiğimiz gibi sunucunun direk bizim bilgisayarımızdaki bir dosyaya erişmesi değil. Sunucu sadece böyle bir cookie oluştur/sil/değiştir diyor ve tarayıcımız bizim için bu işlemleri gerçekleştiriyor. Yani sunucunun direk olarak bizim bilgisayarımızdaki bir dosyaya erişme izni yok. Zaten tarayıcı ayarlarımızdan cookie lerin tutulup tutulmayacığını kendimiz belirleyebiliyoruz.

Her bir websitenin kendine ait cookie’si olabileceği gibi aynı sitenin birden fazla cookie si olabilir.

Hiç merak ettiniz mi, bir kez web sitesine giriş yaptığımızda ve daha sonradan o siteye tekrardan girdiğimizde bizden giriş bilgilerimiz istenmiyor bunun yerine direk giriş yapıyor? İşte bu cookie ler ile sağlanıyor. Şimdi cookie lerin oluşturulmasını inceleyelim.

Cookie’ ler dediğimiz gibi sunucunun yönetimindedir. Yani cookie nin oluşmasını sunucu belirliyor. 3’lü el sıkışmanın tamamlandığını ve HTTP Request attığımızı varsayalım(yani bir sayfayı görmek istiyoruz.). Her şey başarılı gerçekleşti ve sunucu bize şu şekilde bir HTTP Response mesajı gönderdi:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Set-Cookie: isim=umut; 
Content-Length: 88
Content-Type: text/html
Connection: Closed

(data)(data)(data)

Tarayıcımız bu Response u yorumladığında set-cookie header ını görünce, sunucunun cookie oluşturmak istediğini anlıyor ve cookie i oluşturuyor. Artık aynı web sayfasına tekrar bağlandığımızda tarayıcımız o websitesinin cookie si var mı bunu kontrol ediyor, var ise bundan sonraki tüm HTTP Request mesajında bu cookie i sunucuya gönderiyor. Örnek bir HTTP Response mesajı şu şekilde:

GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Cookie: isim=umut;

Artık sunucu bu HTTP Request mesajını aldığında bu mesajı gönderenin umut olduğunu anlayacak.

Başka bir HTTP Response mesajına bakalım:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Set-Cookie: isim=umut; expires=Sun, 19 Jun 2010 20:00:00 GTM; domain=umuttosun.com; path=/ 
Content-Length: 88
Content-Type: text/html
Connection: Closed

(data)(data)(data)

Cookie’lerin birkaç özelliği daha bulunuyor. Yukarıdaki örneğe bakalım.

  • expires: Cookie’nin ne zaman sonlanacağını belirtiyor. Bu tarihin sonunda cookie silinir. Eğer bu parametre verilmezse cookie ler tarayıcı oturumu süresi boyunca tutulur.
  • domain: Cookie’nin hangi domainlere ait olduğunu belirtiyor. Eğer belirtilmezse bu cookie nin alt domainler harici diğer domainlerde aktif olacağını gösterir. Örneğimizde ki cookie “altdomain.umuttosun.com” gibi domainlerdede aktif.
  • path: Bu parametre de cookie nin nerelerde aktif olacağını belirtiyor. Domain parametresinden farkı ise, domain parametresi hangi domainlerde aktif olacağını belirtiyor, path ise belirtilen subdirectory lerde aktif olacağını belirtiyor. Örneğimizde cookie nin bütün alt dizinlerde aktif olduğunu görüyoruz. Eğer “path=/img” olsaydı, cookie sadece /img ile başlayan alt dizinlerde gönderilecekti.

Cookie’leri javascript ile de oluşturabiliyoruz:

document.cookie = "isim=umut; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/";

HttpOnly

Javascript ile cookie lerin değiştirilmesi büyük bir güvenlik açığı oluşturuyor. XSS zafiyeti sayesinde saldırganlar cookie leri ele geçirebiliyor ve bu cookie ler ile kullanıcının web sitelerindeki oturumlarını çalabiliyorlar.(bknz owasp)

Cookie oluştururlen “HttpOnly” flag ini aktif ederseniz cookie ler javascript ile erişilemez hale geliyor. (bknz owasp)

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Set-Cookie: isim=umut; expires=Sun, 19 Jun 2010 20:00:00 GTM; domain=umuttosun.com; path=/; HttpOnly 
Content-Length: 88
Content-Type: text/html
Connection: Closed

(data)(data)(data)

Secure

Cookie ler le ilgili bir güvenlik flag i daha bulunuyor: Secure

Bu flag aktif edilirse cookie güvensiz(!) http bağlantılarında gönderilmiyor, sadece ssl/tls sertifikası bulunan https sayfalarında gönderiliyor(tabiki cookie i oluşturan web sitesi için geçerli.). Buda man in the middle saldırılarında cookie lerinizin saldırgan tarafından ele geçirilmesini önlüyor.

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Set-Cookie: isim=umut; expires=Sun, 19 Jun 2010 20:00:00 GTM; domain=umuttosun.com; path=/; HttpOnly; Secure 
Content-Length: 88
Content-Type: text/html
Connection: Closed

(data)(data)(data)

Be First to Comment

Leave a Reply

Your email address will not be published.