Bir kullanıcı sitenize giriş yapar, sepetine ürün ekler, sayfalar arasında gezinir ve sistem onu tanımaya devam eder. Bu son derece doğal görünen davranışın arkasında aslında çözülmesi gereken temel bir problem yatar: HTTP protokolü durumsuzdur (stateless). Yani her istek, sunucu için bağımsız ve birbirinden habersizdir. Sunucu, bir önceki isteği kimin gönderdiğini kendiliğinden bilmez. İşte oturum (session) ve kimlik yönetimi, tam da bu unutkanlığı çözmek için vardır. Bu yazıda temelleri güvenlik odağıyla ele alacağız.

Durumsuzluk Problemi
Her web isteği kendi başına gelir ve sunucu onu işleyip yanıt verir, sonra unutur. Peki kullanıcı giriş yaptıktan sonra bir sonraki sayfada onu nasıl tanırız? Bunun için istekler arasında taşınabilen bir "kimlik işareti" gerekir. İşte oturumlar bu işareti yönetir.
Temel akış şöyledir: kullanıcı giriş yapar, sunucu bir oturum oluşturur ve kullanıcıya benzersiz bir oturum kimliği (session ID) verir. Kullanıcı sonraki her istekte bu kimliği geri gönderir; sunucu da "aha, bu o kullanıcı" der. Bu kimlik genellikle bir çerez (cookie) aracılığıyla taşınır.
Çerezler: Kimliğin Taşıyıcısı
Çerez, tarayıcının sakladığı ve her istekte otomatik olarak sunucuya gönderdiği küçük bir veri parçasıdır. Oturum kimliği genellikle bir çerezde saklanır. Ancak çerezler yanlış yapılandırıldığında ciddi güvenlik açıklarına yol açar. Bu yüzden birkaç öznitelik hayati önemdedir:
- HttpOnly: Çereze JavaScript'in erişmesini engeller; XSS ile oturum çalınmasını zorlaştırır.
- Secure: Çerezin yalnızca HTTPS üzerinden gönderilmesini sağlar.
- SameSite: Çerezin başka sitelerin istekleriyle gönderilmesini kısıtlar; CSRF'e karşı savunma.
<?php
session_set_cookie_params([
'httponly' => true,
'secure' => true,
'samesite' => 'Strict',
]);
session_start();
Oturum kimliği, dijital kimliğinizin anahtarıdır. O anahtarı kaybederseniz, hesabınızı da kaybedersiniz. Bu yüzden onu korumak, parolayı korumak kadar önemlidir.
Sunucu Tarafı Oturumlar
PHP gibi dillerde en yaygın model sunucu tarafı oturumlardır. Sunucu, kullanıcıya yalnızca anlamsız bir kimlik verir; gerçek veriler (kim olduğu, yetkileri) sunucuda saklanır. Böylece kullanıcı verinin içeriğini göremez veya değiştiremez; elinde yalnızca bir bilet vardır.
<?php
session_start();
// Giriş başarılı olduktan sonra:
$_SESSION['kullanici_id'] = 42;
$_SESSION['rol'] = 'musteri';
// Sonraki isteklerde kontrol:
if (isset($_SESSION['kullanici_id'])) {
// Kullanıcı giriş yapmış
}
Bu yaklaşımın güçlü yanı, kontrolün tamamen sunucuda olmasıdır. Kullanıcının çıkışını yapmak için sunucudaki oturumu silmek yeterlidir; kullanıcının cihazında hassas hiçbir bilgi kalmaz.

Kimlik Doğrulama ve Parola Saklama
Oturum yönetiminin kalbi, kimlik doğrulamadır (authentication): kullanıcının gerçekten iddia ettiği kişi olduğunu kanıtlaması. Bunun en yaygın yolu parolalardır ve parola saklamak, güvenliğin en kritik ama en çok hata yapılan alanıdır.
Altın kural: parolalar asla düz metin olarak saklanmaz. Hatta basit şifrelemeyle bile değil. Parolalar özel algoritmalarla özetlenir (hashing) ve saklanır. PHP bunu son derece kolaylaştırır:
<?php
// Kayıt sırasında parolayı özetle
$hash = password_hash($parola, PASSWORD_DEFAULT);
// Giriş sırasında doğrula
if (password_verify($girilenParola, $hash)) {
// Parola doğru
}
password_hash, arkada tuzlama (salting) ve yavaşlatma gibi güvenlik önlemlerini otomatik uygular. Veritabanınız çalınsa bile, iyi özetlenmiş parolaları geri çevirmek son derece zordur.
Yetkilendirme: Kimlikten Sonrası
Kimlik doğrulama "sen kimsin" sorusunu yanıtlar; yetkilendirme (authorization) ise "neye erişebilirsin" sorusunu. Bir kullanıcının giriş yapmış olması, her şeye erişebileceği anlamına gelmez. Örneğin bir e-ticaret sisteminde:
- Müşteri yalnızca kendi siparişlerini görebilmeli.
- Bir kullanıcı başkasının hesabına, kimlik numarasını değiştirerek erişememeli.
- Yönetici paneline yalnızca yetkili roller girebilmeli.
Bu kontroller her hassas işlemde sunucuda yapılmalıdır; sadece "giriş yapmış mı" kontrolü yeterli değildir.
Güvenli Oturum İçin Ek Önlemler
Sağlam bir oturum yönetimi için birkaç ek uygulama önemlidir:
- Oturum yenileme: Giriş sonrası oturum kimliğini yenileyin (session_regenerate_id) ki sabitleme (session fixation) saldırısı engellensin.
- Zaman aşımı: Uzun süre işlem yapılmayan oturumları otomatik sonlandırın.
- Çıkış: Çıkışta oturumu sunucuda tamamen temizleyin.
- HTTPS zorunluluğu: Oturum verisinin ağda açık gitmesini önleyin.
Berasoft'ta geliştirdiğimiz müşteri panelleri ve e-ticaret sistemlerinde bu önlemleri istisnasız uyguluyoruz; çünkü oturum güvenliğindeki tek bir zayıflık, tüm kullanıcı hesaplarını riske atabilir.
Sonuç
HTTP'nin durumsuzluğu, oturum yönetimini web geliştirmenin temel bir problemi hâline getirir. Çerezlerle taşınan bir oturum kimliği, sunucuda saklanan güvenli veriler, doğru özetlenmiş parolalar ve titiz yetkilendirme kontrolleri; bunların hepsi bir araya geldiğinde kullanıcıyı hem tanıyan hem de koruyan bir sistem ortaya çıkar. Bu temelleri sağlam kurmak seçenek değil, zorunluluktur; çünkü bir kullanıcının kimliği, en değerli varlıklarından biridir ve onu korumak doğrudan sizin sorumluluğunuzdadır.
Bir sonraki projeniz için hazır mısınız?
Okuduklarınızı işinize uygulamak veya dijital dönüşümünüzü konuşmak isterseniz, ekibimiz bir mesaj uzağınızda.

Yorum Yap