28 Şubat 2012 Salı

PHP Session Güvenliği

Üyelik sistemi kullanan web siteleri genelde sayfayı ziyaret edenlerin üye olduğunu anlamak için Session'ları kullanırlar.Session kullanmanın ise o kadar da güvenli olmadığı söyleniyor.Ancak gerekli güvenlik önerilerini kullanarak Sessionlarımızı daha güvenli bir hale getirebiliriz.
Session kullanmanın pek de güvenli olmamasının sebebi genel olarak, üyelik sistemine giriş yapan kullanıcının yarattığı Session bilgilerinin birileri tarafından ele geçirilip, taklit edilmesiyle o kullanıcının hesabını ele geçirmesi veya daha tehlikeli bir şekilde sitenin tamamını ele geçirmesi olarak ifade edebiliriz.
Üyelik sistemi olan sitelerde genel olarak, her üye başarılı bir giriş yaptığında o üyeye özel bir session oluşturulur ve üyenin çevrimiçi olup olmadığı bu sessionlarla denetlenir.
session_start();

$_SESSION['id']=$uyenin_idsi;
Genel olarak üyenin hangi üye olduğunu ayırt etmek için üyeye has id,email gibi sessionlar kullanmak gerçekten de tehlikeli olabilir. Çünkü bir şekilde bizim bu session bilgilerimizi ele geçiren bilgi hırsızları bunu oluşturdukları sessionlarla profilimizi ele geçirmek için kullanabilirler.
Peki bu durumlardan korunmak için neler yapabiliriz sorusuna cevaplarımız neler?
1.Sessionlarda üye numarası,email gibi hassas bilgileri kullanmayın.
2.Üye her giriş yaptığında onun session numarasını değiştirin.Bunun için rasgele bir şekilde sayı ve karakterler üreten fonksiyonlar yazabilirsiniz.10-11 karakter uzunluğu idealdir.
3.Sessionları veritabanında saklayın.
4.Sessionların yok olma sürelerini kısa tutun.
5.Session değerlerine sayfanın linkinde asla yer vermeyin.
Birinci maddenin nedenini açıkladık.İkincisi ise gayet basit : sessionların karmaşık olması bizim kimliğimizin tahmin edilmesini zorlaştırır.Üçüncü madde ise bizim işimize çok yarayacak bir madde.Bunun için veritabanımızda sessionlar için bir tablo yaratmamız yeterli.Tablomuzda 2 sütun olmalı en az : biri session değeri, ikincisi ise o sessionun hangi üye için yaratıldığı. Bu bize bir çok kolaylık sağlar. Birincisi random bir session değeri yaratıldığı zaman yaratılan bu sessionun önceden bulunan sessionlara eşit olup olmadığını denetleyebiliriz.Eğer sessionumuz mevcut sessionlarda varsa, küçük bir olasılık, başka bir session oluşturup veritabanına kaydedebiliriz.İkincisi ve daha önemli avantaj ise bu bizim sadece bir session değerine bağlı kalmamızı önler.Çünkü veritabanına kaydettiğimiz karmaşık sessionların hangi üyeye ait olduğunu biliriz.
Her girişte ayrı bir session değeri vermek bilgi hırsızlarının bizim sabit bir sessionumuz olmadığından işini zorlaştırır ve hesabımızı ele geçirmek için kullanabileceği session değerlerine ulaşmalarını engeller.
Her sayfa yenilemede de ayrı bir session değeri atanması bile güvenlik çılgınları için düşünülebilir bir seçenek :)

Hiç yorum yok:

Yorum Gönder