SevkiBilge

PHP’de session yönetiminde karşılaştığım güvenlik açığı ve çözüm önerileri

EnginOzturk
· 3 gün önce · 0 görüntülenme
Arkadaşlar selam, uzun zamandır PHP ile projeler geliştiriyorum ve geçen hafta bir müşteri projesinde session yönetimiyle ilgili ciddi bir güvenlik açığıyla karşılaştım. Normalde session’ları basitçe kullanırız, ama bu sefer uygulama üzerinde yaptığım bir pentest sırasında fark ettim ki, session ID’lerin tahmin edilebilirliği ve sunucu tarafında yeterince korunmaması yüzünden saldırganlar kolayca oturum ele geçirebiliyor. Özellikle session dosyalarının /tmp dizininde varsayılan isimlerle saklanması ve session ID’nin sadece bir MD5 hash'i olması, brute force saldırılarına karşı oldukça zayıf bir yapı oluşturuyor. Sizce bu tür bir durumda session_regenerate_id() fonksiyonunu her sayfada çağırmak yeterli mi, yoksa farklı bir yaklaşım mı izlemeliyim?

Benim çözüm önerim şu anlık, session dosyalarını varsayılan dizinden alıp proje kök dizini dışında özel bir klasöre yönlendirmek ve session ID’yi daha karmaşık bir algoritma ile oluşturmak. Ayrıca her başarılı girişten sonra session ID’yi yenilemek ve kullanıcıya özel bir token eklemek gibi ek önlemler düşünüyorum. Ancak bu yöntemlerin performansı ne kadar etkileyeceğinden emin değilim. Özellikle yüksek trafikli bir sitede session dosyalarının sürekli yenilenmesi sunucuya ek yük bindirir mi? Ya da session’ları veritabanında tutmak daha mı mantıklı olur? Deneyimli arkadaşlardan bu konuda fikir almak isterim.

Bir de şu konu var: Session sabitleme (session fixation) saldırılarına karşı aldığım önlemler yeterli mi? Örneğin, kullanıcı giriş yapmadan önce oturum başlatıyorum ve giriş sonrası session ID’yi değiştiriyorum. Ama bazı kaynaklarda, sadece ID değiştirmenin yetmeyeceği, ayrıca session değişkenlerini de temizlemek gerektiği yazıyor. Sizin bu konuda ekstra bir önleminiz var mı? Özellikle çerezlerdeki session ID’nin HttpOnly ve Secure flag’lerini aktifleştirdim, ama yine de bir açık kalıyor mu? Tecrübelerinizi paylaşırsanız sevinirim.
0 yanıt

Henüz yanıt bulunmuyor. İlk yanıtlayan siz olun!

Yanıt yazmak için giriş yapın.