PHP ile Güvenli Oturum Yönetimi: Best Practices

Nedim Bilgiç 8 dk okuma

Web uygulamalarında oturum yönetimi, kullanıcı deneyiminin temel taşlarından biridir. Ancak yanlış yapılandırılmış bir oturum sistemi, ciddi güvenlik açıklarına yol açabilir. Bu yazıda PHP'de güvenli oturum yönetiminin nasıl sağlanacağını detaylı olarak inceliyoruz.

Session Hijacking Nedir?

Session hijacking, bir saldırganın aktif bir oturumun session ID'sini ele geçirerek kullanıcının kimliğine bürünmesidir. Bu saldırı türü; XSS açıkları, ağ trafiği dinleme veya tahmin yoluyla gerçekleştirilebilir.

Session Fixation Nedir?

Session fixation saldırısında, saldırgan kurbanı önceden belirlediği bir session ID ile oturum açmaya zorlar. Kurban giriş yaptığında, saldırgan aynı session ID'yi kullanarak sisteme erişim sağlar.

Güvenli Oturum Yapılandırması

// php.ini veya runtime ayarları
ini_set('session.cookie_httponly', 1);
ini_set('session.cookie_secure', 1);
ini_set('session.use_strict_mode', 1);
ini_set('session.cookie_samesite', 'Strict');
session_start();

Session Regeneration

Kullanıcı giriş yaptığında session ID'nin yenilenmesi, fixation saldırılarını önlemenin en etkili yoludur:

// Giriş sonrası
session_regenerate_id(true);
$_SESSION['user_id'] = $user->id;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
$_SESSION['last_activity'] = time();

Oturum Doğrulama

Her istekte oturumun geçerliliğini kontrol etmek önemlidir:

function validateSession() {
    if ($_SESSION['ip'] !== $_SERVER['REMOTE_ADDR']) return false;
    if ($_SESSION['user_agent'] !== $_SERVER['HTTP_USER_AGENT']) return false;
    if (time() - $_SESSION['last_activity'] > 1800) return false;
    $_SESSION['last_activity'] = time();
    return true;
}

Sonuç

Güvenli oturum yönetimi, bir web uygulamasının güvenlik zincirindeki en kritik halkalardan biridir. HttpOnly ve Secure flag'leri, session regeneration, IP ve user-agent doğrulaması gibi önlemlerle oturum güvenliğinizi önemli ölçüde artırabilirsiniz.

NB
Nedim Bilgiç

Backend Developer. Kurumsal web siteler, e-ticaret çözümleri ve özel yazılım projeleri geliştiriyorum.