ASP.NET ASP Session Transferi

geri

ASP.Net ile gün geçtikçe farklı tecrübeler ediniyor ve fırsat buldukçada sizlerle paylaşıyorum. Dün başıma gelen session olayını kendi kurallarıma göre çözmeyi başardım. Önce senaryoyu sizlere anlatayım.

Önceden klasik asp ile yapılmış bir finans modülü bulunuyor. Siteye giriş yapan kullanıcı session nesnesine atanan id numarası ile burda işlemlerini yapıyor.

Sonradan site Asp.Net ile yeniden yapılıyor fakat Finans modülüne el değmiyor, nedenide geliştirilecek veya değiştirilecek bir durumun olmaması. Sitenin Giriş (Login) bölümü asp.net ile yapıldığından, klasik asp ile asp.net ile oluşturulan session bilgilerini okuyamıyoruz ve haliyle modülü çalıştıramıyoruz.

Açık konuşmak gerekirse bu durumu farkettiğimde, Google' dan ufak bir araştırmayla sonuca gidebileceğimi düşünmüştüm. Sonuçta Microsoft bunu bir şekilde düşünmüş olmalıydı. Bir sürü sonuca ulaştım fakat istediğim kalitede, istediğim işlevsellikte bir sonuca ulaşamadım. Zamanımda ciddi anlamda kısıtlıydı, genel olarak izlenilen yollar burda, burda ve burdaki adreslerde bulunuyor. Emre abi ve Yunus Emre ile biraz beyin fırtınası yaptıktan sonra aklıma birkaçtane fikir geldi. Kafadan veritabanını olaya bulaştırmak istemiyordum, bu yüzden bir çereze (cookie) id bilgisini atıp asp okumak geldi. Güvensiz olduğunu biliyorum fakat güven konusuna gelmeden önce zaten çerezi okuyamıyorsunu, yani sessiondaki durum çerezde de bulunuyor. (Belkide ben becerememişimdir.) Sonrasında işin içine veritabanını birşekilde bulaştırmam gerektiğini anladım. Veritabanına bir tablo ekleyip session.sessionid bilgisini, kullanıcı id sini, birde rastgele bir sayıyı eklemeyi düşündüm. Çokta mantıklı geldi çünkü session.sessionid siteye giren her kullanıcıya iis tarafından atanan bir kimlik numarasıydı. Rastgele sayıyı adres satırından gönderip, sql cümlesinde de rastgele sayı ve session.sessionid ile birlikte doğrulamayı yapıp bilgiyi klasik asp de bir sessiona atayıp dilediğim gibi kullanabilirim diye düşündüm ve işe giriştim. Ama gördüğüm bu teorimide çürüttü. ASP.Net' in sessionid si ile ASP nin ki çok farklıydı. Oyy Allah' ım dedim bir yolu olmalı, bu sefer kafamdaki lamba projektör edasıyla yandı ve kullanıcının ip adresini kullanabileceğimi düşündüm.

1. ASP.NET Giriş sayfasından giriş yapılır. o Veritabanındaki Session adındaki tablonun içindeki alanlara gerekli bilgileri yazıyoruz. - ID = Gerekli olan bilgi, yani sessiona ne atamak istiyorsanız o bilgi. - RastgeleSayi = Randomize sayı üreten bir fonksiyonla üretilen sayı. - IP = Kullanıcının ip adresi. o Yukarıdaki RastgeleSayi yi ASP.NET’ de de bir sessiona da atıyoruz.

2. ASP.NET ile Yapılmış Sayfalardan ASP ye Session Transferi İçin. o ASP.NET ile RastgeleSayi sessionunda tutulan sayıyı adrese iliştiriyoruz. Örnek: deneme.asp?R= gibi..

3. Deneme.asp Sayfasından İstediğimiz Session Bilgisine Ulaşmak. o Select * from Session where RastgeleSayi=’”&request.queryString(“R”)&”’ and IP = ‘”&Request.ServerVariables(“remote_addr”)&”’ cümlesiyle istediğimiz ID değerine ulaşabiliyoruz. Buradaki cümleyi örnek olsun diye yazdım. Kesinlikle Sql Enjeksiyon için veya benzeri durumlar için gerekli düzenlemeleri yapın.

Saat gibi işleyen bir sistem olduğunu söyleyebilirim. Bu şekilde performans açısından da ödün vermiyoruz ek bileşende yüklemiyoruz. Burada beni düşündüren tek nokta güvenlik oldu. Düşünüldüğünde neredeyse bu işin imkansıza yakın olduğunu anlıyorsunuz. Bilgi adres ile birlikte gönderildiği için elle müdehale yapılıp farklı kullanıcıların hesaplarına erişilebilir. Fakat fakat fakat ! kafadan atacağı rakamın veritabanında olması gerekiyor, aynı zamanda karşısındaki kayıtlı ip adresinide bilmesi gerekiyor. Ip adresini bilse bile kendi ip sini nasıl değiştirir bilemiyorum. Burada çok ince bir nokta üzerinde güvenliğimiz ayakta duruyor. %100 güvenliğin olmadığını ve sadece " Yaradan Hatasız Kodlamıştır." lafını hatırlatmak isterim :)

Kod yazıp, ortalığı bulandırmak istemedim, sadece mantığı anlatmaya çalıştım. Belki biraz karışıkmış gibi duruyor fakat görüldüğünden çok daha basit. Hertürlü görüşe, taktiğe tekniğe açığım. Yorumlarınızı bekliyorum.

2009-01-27 | asp-net