RSS feed
<< Güvenlik Projeleri için Programlama Dili Seçimi | Home | Astaro Mail Security >>

WUG-SYH #3 : Zayıf Oturum Yönetimi

Web uygulaması güvenliğindeki problemlerin hepsi zayıf girdi denetimi sebebiyle oluşmaz. Bir çok zafiyetin sebebi "bussiness logic" de denilen, aslında mantıksal hatalardan kaynaklı zafiyetlerdir.

Peki Bunlar Nelerdir?
Benim en çok karşılaştıklarım uygulamanın tasarım problemi içerdiği ve dolayısıyla kimlik doğrulama problemleri içeren durumlar. Yani atıyorum e-mail servisi veren bir web uygulamasının sil.php?mID=324 parametresi ile 324. maili silme isteği gönderen kişinin gerçekten o mailin sahibi mi, yoksa başkası mı olduğunun kontrolünün yapılmadığı durum. Aslında çok basit bir şeymiş gibi görünse de bir çok web uygulamasında bu tip mantıksal problemler var.

Başka bir örnek ise yine e-posta servisimizdeki mail gönderme örneği olabilir. Diyelim ki mailinizi yazıyorsunuz, daha sonra yolla butonuna basınca şu şekilde bir HTTP isteği oluşuyor.
http://xxxx.com/mail/yolla.php?alici=hasan&yollayan=ahmet&mesaj=...

Burada muhtemelen yolla.php biraz daha modüler olsun diye alici ve yollayan parametresi dışarıdan alınıyor. Bu durumda sunucu tarafında gerekli kontroller yapılmıyorsa -her türlü HTTP isteğinin içindeki parametrelerin manipüle edilebileceğini ilk yazımızda gündeme getirmiştik- yollayan parametresi değiştirilip bir başka kişiden küfür dolu maili herhangi birisine yollayabilme durumunuz mevcut.

Peki Çözüm?
Bu durumda aslında sunucu tarafında doğru kontroller yapılabilir gibi duruyorsa da bence asıl yapılması gereken uygulama mantığını değiştirmek. Zira kullanıcı için, o ana özel şekilde değişmeyen her şey veritabanından alınmalı, gerekmiyorsa kullanıcıya sorulmamalıdır.
Netekim elimizde uygulamaya giriş yapmış kullanıcının cookie'si var, bu insanin kim olduğunu biliyorsak yolla.php sayfasına bu adamın adını yollamak pek mantıklı değildir. Bunun yerine yapılması gereken yolla.php içerisinde kullanıcının cookie'sine bakarak veritabanından ilgisi ismi çekmek olmalıdır. Bu arada unutmadan ekleyelim, cookie, sesion gibi bilgiler de manipüle edilebilir, ama bir kullanıcı diğerinin session bilgisini bilmesi doğal olarak mantıklı değildir, biliyorsa ortada session fixation gibi bir gariplik var demektir ve bu apayri bir zafiyettir.

Unutulmaması gereken bir şey vardır ki, kullanıcıdan alınan bilgiler her zaman web uygulaması güvenliği için ölümcül değere sahiptir. Kullanıcıdan alınan her türlü bilgi için iki defa düşünülmesi gerekmekte, gerekmiyorsa hem mantıksal anlamda bir hata yapmamak hem de çeşitli input oyunlarına gelmemek için, kullanıcıdan veri alınmamalıdır.



Add a comment Send a TrackBack