"Session" v.s. "Cookie"

Dikkat: Bu yazının yazılma tarihinin üzerinden en az 60 gün geçmiş. İçerisindeki bilgiler güncelliğini yitirmiş olabilir. Yorumları ve güncellemeleri göz önünde bulundurarak yazıyı takip ediniz.

Bunlar nedir ne işe yarar?

PHP'de aslında dinamizmi getiren çoğu şeye karşılık kullanıcının hareketlerini izlerken veya kullanıcının hareketlerine karşı kodumuzun vermesini istediğimiz tepkileri belirlerken kullanıcı taraflı bilgi saklamaya ihtiyaç duyuyoruz. Sonuçta bütün olay sunucuda veya kullanıcıda bitmiyor. İkisinin iyi senkronu ile iyi koda dayanıyor.

Cookie de session da aynı yapıdadır. Basit olarak olay session'u cookie'ye benzeterek anlatmakla daha rahat anlaşılacaktır.
Cookie'ler kullanıcının bilgisayarında bir meta ve değer olarak tutulan, domainlere göre süzgeçlenen dosyalardır. Yani;
1. Dosya adı vardır ve bellidir.
2. İçeriği o dosyaya ait bilgiyi içerir.
(Normal veriden farklı yani)
3. bu dosyaların ve buna ait bilgilerin silineceği tarih bellidir. Son kullanma tarihi gibi.

Cookie dosyaları zamanı geldiğinde silinen değişkene benzer veri taşıma methodudur. Kullanıcı tarafında taşındığı için günevli olmayıp, kodlarda içeriği zararlı veriler taşınmamalıdır. Mesela bir üye sisteminde cookie içinde kullanıcının şifresi taşınmaz. Ancak oturum id'si kullanıcı id'si gibi bilgiler taşınmalıdır.

Session ise cookie'ler gibi çalışır, ancak bu bilgilerin silineceği zaman kullanıcının oturumu sonlandırdığı andır. Yani bu verilerin yönetimini zamanla sağlamayız. Oturum dedğimiz şey ise tarayıcı programa göre değişir. Bazı programlar bulunduğu pencereye ait oturumu taban alır. bu tarayıcılarda bir oturuma ait sitedeki pencerelerin hepsi kapanınca oturum kapanmış olur. Bazı tarayıcılarda ise tarayıcı program ve onunla ilişkili process kalamyana kadar ortak bir oturum çerçevesinde gider.

Peki bunları nerelerde kullanırız?

Cookie'ler belirli bir tarihe göre silinirler.. Uzun vadeli kullanıcı taraflı veri saklarken cookie'ler biçilmiş kaftandır. Ancak kısa vadeli (3-5 dakikalık veriler için, mesela oturum yönetimi için) pek güvenilir olamayabilir. Bunun için session (adı üstünde zaten "oturum") kullanılır. Bir üye sistemi için cookie kullanılırsa, örneğin internet cafe'deki acil çıkışlarda masaya oturan diğer kişi bulduğu tarayıcı pencerelerini kurcalarken yanlış şeyler yapabilir..
Anket veya ziyaret kontrollerinde cookie'ler gayet güzel çalışabilirler.
Şu an dökümanlar bölümünde listelere dikkat ettiyseniz, listelerdeki dökümanların başındaki turuncu oklar renk değişimi gösterecektir. Okuduğunuz dökümanlar cookieler sayesinde orada daha flu bir renge dönüşecek ve okumadığınız, yeni dökümanları daha rahat seçebileceksiniz. Bu cookie sayesinde oluyor. Ama kullanıcı girişi çıkışı session + cookie karışımı ile.
Beni hatırla seçeneği ile bilgisayarınız bir kod yazılıyor. bu kod veritabanındaki hatırlama kodunuzla karşılaştırılıp eşlenmesi halinde otomatik giriş sağlanıyor. Tabiki bu kod yeterince güvenli. Çözebilen var ise artık girip istediğini yapsın. Zaten kodu kırmakla haketmiş :-)

Bu alanda yapılan yanlışlar ve güvenlik sorunları!!

- Çoğu php'ye yeni başlayan cookie'leri önce öğrenip, ilk giriştikleri üye sisteminde cookie ile yazıyor. Burası yanlışın başlangıcı.
- Yine çoğu yeni başlayan php programcıları üye sistemlerinde cookie veya session değişkenlerinin içine tek kontrol ile kullanıcı adı veya kullanıcı adı + şifre saklıyor.. Yanlışın 1 numaralısıdır bu..
Exploitler ile bu açıklar kolaylıkla aşılabilir.

"Hangisi" değil "Nasıl"?

Ne kullandığınız değil, nasıl kullandığınız önemlidir. Belki üye sistemi session yerine cookie ile daha sağlıklıdır. Nerede kullandığınız da çok önemli bir unsurdur. Mesela bir banka sitesini yapıyorsanız Session kontrollü cookie tabanlı bir yapı çok daha sağlam olur. vs vs..


Hazırlayan : Mehmet Fatih YILDIZ

Yorumlar

Üye Resmi Alperen
6 Haziran Cumartesi ´09 17:55
Teşekkürler gerçekten güzel anlatmışsın. Yalnız bir sorum olacak, benim gördüğüm büyük scriptlerde giriş için genelde cookieler kullanılır. Cookieleri bu şekilde cazip hale getiren şey nedir ? Ben anlamadım pek ben genelde, session kullanırım.
Üye Resmi Görkem
7 Ağustos Cumartesi ´10 14:03
merhabalar makalenizi okudum gerçekten çok yararlı bir makale teşekkurler. aklıma birşey takıldı.

"Exploitler ile bu açıklar kolaylıkla aşılabilir."
Demişsisniz biz peki cookie ile yaptıgımız kontrolleri nasıl yapmalıyız ki exploitler açıklara ulaşamasın aslında bu bir açıkmıdır cunku kullanıcı adını ve şifresini nasıl bulabilir ?
10 Ağustos Salı ´10 16:08
Eğer siz her sayfanızda authorization'u kontrol ederken sadece cookie tabanlı bir kontrol koyuyorsanız. Ben authenticate yaptıktan sonra oradaki kullanıcıyı değiştirerek veya giriş yapmış birinin cookie'lerini kopyalayarak sisteme girş yapmış gibi gösterebilirim kendimi.

Şifreleseniz bile şifreler çözülebilir, Ayrıca tek taraflı kontrol yapmak her zaman açık bırakacaktır. Veritabanınnızda veya daha farklı methodlarla bu kontrollerinizi çift taraflı yapmaya çalışın. Bri token üretip veritabanına bu token'ları yazmak hatta bunlara veritabanınınzda bir expire süresi belirlemek. Her hit'de bu expire zamanlarını yenilemek gibi şeyler bulabilirsiniz.
Üye Resmi Alperen
13 Temmuz Pazartesi ´15 07:46
Yine çoğu yeni başlayan php programcıları üye sistemlerinde cookie veya session değişkenlerinin içine tek kontrol ile kullanıcı adı veya kullanıcı adı + şifre saklıyor.. Yanlışın 1 numaralısıdır bu..
Exploitler ile bu açıklar kolaylıkla aşılabilir.

Merhaba,zaman zaman çalışmadan önce bir kaç konuda araştırma yaparım ve sık sık burayı ziyaret ederim.Bu son cümlede açıkçası biraz durdum.Bir üyelik yönetiminde çoğu zaman,bir session oluşturur bu session'a kullanıcının  md5(şifre) vs. gibi bir  bilgisi saklanır.
(elbette önce bir db kontrolü yapılır,injection için süzülür ve kimi zaman çeşitli derlemeler de yapılabilir,şifrenin son 4 rakamı ters çevrilerek bu md5 uzunluğuna eklenebilir vs... vs.)
Son cumleden bunun bir hata olduğunu çıkartıyorum.
Bu aşamada acemi programcıların ilk yapması gereken nedir ?Hangi noktada SESSION, COOKIE ile desteklenebilir yada iki aşamalı bir kontorl halini alabilir ?

Güzel blog için teşekkürler..
Yeni Yorum *
İletişim Bilgileri
*
*
E-Posta adresiniz gösterilmeyecektir.
(unut)
Güvenlik Kodu *

Gönderiliyor