Güvenli Cookie
Oturum Anahtarı Nedir ?
Web uygulamaları, istemcilerini birbirinden ayırt etmek için belli yöntemlerle oluşturulan, oturum anahtarı denilen yapıları kullanırlar. Oturum anahtarlarının isimleri, uygulamadan uygulamaya farklılık göstererek karşımıza JSESSIONID, PHPSESSID,ASPSESSIONID gibi örnekler ile çıkabilmektedir. Oturum anahtarları ilgili programlama diline ait kütüphaneler ve fonksiyonlar yardımı ile oluşturulabileceği gibi özel metodların kullanımı ve el yordamı ile de oluşturulabilir. Bu süreç, istemcinin hedef uygulama sunucusuna istek yapması ile başlar. İsteği alan sunucu, istemciye özel oturum anahtarını üretir ve artık kullanıcı bu anahtar ile tanımlanır. Oturum anahtarına ihtiyaç duyulmasının nedeni HTTP protokolünün ‘stateless’ bir yapıda olmasıdır. İstemciye ait bir oturum bilgisi tutulmadığı takdirde, sunucu için yapılan isteklerin her biri birbirinden bağımsızdır. Oturum anahtarlarının taşınmasında ve istemci tarafında saklanmasında yaygın olarak kullanılan yöntem cookie’dir.
Cookie Nedir ?
Bildiğimiz üzere web sayfalarının kullanıcılarını hatırlamaları için herhangi bir hafızaları bulunmaz. Az önce bahsedilen oturum anahtarları aracılığıyla bu işlem gerçekleştirilir. Cookie, oturum anahtarı ve oturum bilgilerinin saklandığı, istemci tarafında bulunan yapıdır. Cookie’ler , istemcinin uygulama ile etkileşimlerini, gezindiği sayfaları, yaptığı giriş bilgilerini, kullanıcı kimlik bilgilerini taşıyabilirler. Örneğin, A uygulamasına kullanıcı bilgileri ile giriş yapıldığında ve aynı uygulamada işlem yapacağımız farklı bir sayfaya geçiş yaptığımızda, A uygulaması bizim hangi kullanıcı olduğumuzu cookie sayesinde anlayacaktır. PHP ile oluşturulan bir cookie aşağıdaki yapıda ve yöntem ile oluşturulmaktadır.
//setcookie(name, value, expire, path, domain, secure, httponly);
<?php
$cookie_name = "ctrl";
$cookie_value = "ctrl";
$secure = true;
$httponly= true;
setcookie($cookie_name, $cookie_value, time() + (60*60*24), "/","localhost",$secure,$httponly);
?>
Güvenli Cookie'de Bulunması Gereken Özellikler
1.
HTTPS protokolü ile çalışan uygulamalarda cookie için secure
özelliği aktif edilmelidir.
2.
Cross Site Scripting gibi bir zafiyetin istismari sonucunda, tarayıcı üzerinden script çalıştırılarak cookie bilgisinin alınamaması için HttpOnly
özelliği aktif edilmelidir.
3.
İlgili uygulama dışında diğer uygulamaların,subdomainlerin etkilenmemesi için cookie içerisinde domain
ve path
bilgileri verilmelidir.
4.
Expires ve Max-Age değerleri öncesinde atanmış olan ve tarayıcı kapatılsa bile hala ömrünü sürdürmeye devam edebilen persistent cookie
gerekmedikçe kullanılmamalıdır.
5.
Cookie oluşturulurken, yaygın algoritmalar ve metodlar tercih edilmemelidir.