Session hijacking, saldırganın kullanıcının oturum kimliğini (çoğunlukla çerezdeki session ID) ele geçirerek kullanıcı gibi davranmasıdır. Ağ dinleme, XSS, tahmin edilebilir oturum kimlikleri ve oturum sabitleme (fixation) başlıca yöntemlerdir.
Belirtiler
- Kullanıcının yapmadığı işlemler veya farklı IP/cihazdan oturum kayıtları.
- Aynı oturum kimliğinin aynı anda birden fazla ülkeden kullanılması.
Olası nedenler
- Oturum çerezinin HTTP üzerinden iletilmesi.
- Çerezde
HttpOnlybayrağının olmaması; XSS ile JavaScript'ten okunabilir. - Girişten sonra oturum kimliğinin yenilenmemesi.
- Oturum kimliğinin URL'de taşınması.
Çözüm adımları
- Sitenin tamamını HTTPS'e taşıyın ve HSTS uygulayın.
- Oturum çerezini güvenli bayraklarla ayarlayın. PHP örneği:
session_set_cookie_params([
'lifetime' => 0,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax'
]);
session_start();
session_regenerate_id(true); // giriş başarılı olduğunda
- Şifre değişimi, yetki yükseltme ve giriş sonrasında oturum kimliğini yenileyin.
- Çıkışta oturumu sunucu tarafında geçersiz kılın; makul bir boşta kalma zaman aşımı belirleyin.
- XSS'i azaltmak için çıktı kodlaması ve CSP kullanın.
- Hassas işlemlerde parola veya ikinci faktör isteyin.
Önleme
- Oturum kimliğini URL'ye koymayın.
- Oturum kimliğini güçlü rastgele kaynaktan üretin; kendi algoritmanızı yazmayın.
- Şüpheli oturum değişimlerini (IP, tarayıcı) kaydedip uyarı üretin; yalnızca IP'ye bağlamak mobil kullanıcıları zorlayabilir.
Oturum süresi ve yönetimi
Mutlak ve boşta kalma zaman aşımları belirleyin; kullanıcıya aktif oturumlarını görüntüleme ve sonlandırma imkânı verin. Parola değiştiğinde diğer tüm oturumları geçersiz kılmak, çalınmış bir çerezin işe yaramaz hâle gelmesini sağlar. Yönetici paneli gibi yüksek yetkili alanlarda daha kısa süreler tercih edin.
HTTPS tek başına yetmez ama bu korumanın temelidir. Sertifika seçenekleri için SSL sertifikaları, kurulum kontrolü için SSL denetleyici sayfalarını kullanabilirsiniz.