Asp İle Güvenlik Ve Performans [Beyaz Tahribat]
-
Herşeyde olduğu gibi kullandığımız şeylerin güvenliği tam olmalıdır. Nasıl evimize hırsızın girmemesi için alarm taktırıyorsak veya bünyemizde çalışan bir işçinin performansına göre ücret veriyorsak asp dilinde güvenlik ve performans bu denli önemlidir. Bu güzel örnekten sonra asıl meseleye geçelim. :) Bildiğiniz gibi asp sunucu taraflı bir dildir. Bu yüzden diğer sunucu taraflı diller gibi bir takım güvenlik açıklarını manuel olarak kapatmamız gerekiyor.
Güvenlik veya açık dediğimizde 10 yaşındaki çocuğun bile bildiği or açığı geliyor aklımıza. Bu açıkla daha çok üyelik sistemlerinde , string ile veri sorgularken karşılaşıyoruz. Form ile gönderilen verileri temizlemek için en uygun yöntem replace yani süzme yöntemidir. Formlardan veri gönderirken daha çok tırnak işareti ve bilindik sql deyimleri yazılır. Hemen bir örnek göstereyim :
Function Temizle(data)
data = Replace (data , "select","",1,-1,1)
data = Replace (data , "insert","",1,-1,1)
data = Replace (data , "update","",1,-1,1)
data = Replace (data , "delete","",1,-1,1)
Temizle = Data
End Function
Kullanım :
isim = Temizle(Request.Form("isim"))
Gibi klasik sql deyimlerini temizleyebiliriz. Bir diğer açık QueryString ile gönderilen verilerde karşımıza çıkıyor. Gönderilen değer bir id numarası veya bir text olması gerekirken , saldıran kişi oraya sql cümleleri yazarak veritabanımızda çeşitli işlemler yapabiliyor. QueryString ile gelen veriyi işlediğimiz sayfanın başına eklememiz gereken kod aşağıdaki gibidir :
ID = Trim(Request.QueryString("ID"))
if (not isnumeric(ID)) then
Response.Write "Hatalı bir ID numarası girdiniz."
Response.End
End if
Gibi bir deyim yazmanız bu saldırıyıda bertaraf etmenize olanak sağlayacaktır. Gelelim yazının bir diğer konusu olan performans konusuna. Scriptlerde performansı sağlamanın çeşit çeşit yolu vardır. Bu yollar kullandığınız sisteme göre değişir. Ama bu yazıda başlıca ufak performans kayıplarını önlemenin yollarını anlatıcam.
Asp yi ilk öğrendiğimiz zamanlarda sıkça kullandığımız olan nesne Recordset ilerki zamanlarında bize ciddi performans kayıpları yaşatacaktır. Bu yüzden Recordset yerine Execute metodunu kullanmalıyız. Bu metodu veya Recordset i kullanırken dikkat etmemiz gereken bir noktada şu ki Select diye başladığımız sql cümlelerinde gereğinden fazla alanın seçilmesi ciddi performans kayıplarına neden olacaktır. Hemen bir örnek vereyim :
Set JDSQL = Server.CreateObject("Adodb.Recordset")
sql="Select * from uyeler"
JDSQL.Open sql,Conn,1,3
Yerine
Set JDSQL = BaglantiDegiskeni.Execute("Select ID,Isim from Uyeler")
Gibi bir sql cümlesi yazmamız gerekiyor. Peki bu açtığımız bağlantılar nereye gidiyor ? Biz kapatana kadar açık kalıyor ve sistemin gereksiz yere yavaşlamasına neden oluyor. O yüzden sayfanın sonunda veya işlemlerin bittiği yerde açtığımız bağlantıları birer birer kapatmalıyız. Oda şöyle ki :
JDSQL.Close
Set JDSQL = Nothing
Asp programlama dilinde güvenlik ve performans konusunda başlangıç olarak bu kadar bilgi herkese yeter. İleri derecede performans kayıplarını önlemek için yapmanız gerekenleri zaten zamanla öğrenirsiniz. Yazıyı okuduğunuz için teşekkürler :)-----
not : daha yeni kendi sitemde yazdım. taze taze hayrını görün. kodlarda veya herhangi bir yerde yazım yanlışı olabilir bunun için kusura bakmayın.
-
kısa ele almışsın performans ve güvenlik ayrı ayrı geniş kapsamlı ele alınmalıdır ancak dediğin gibi yeni başlayanlar için güzel döküman olmuş eline sağlık. Asp ve performans üzerine sağlam Türkçe kaynak yok ne yazıkki. Güvenlik olarak da her yerde replace yöntemleri anlatılmış.. isnull, isnumeric request.form , request.querysting nerelerde nasıl kullanılmalıdır, replacenin işe yaraması için nelere dikkat edilmelidir, bunlar performansa nasıl etki eder performans için sadece sql cümleleri yeterlimidir if else yerine nerelerde select case kullanırsak performans yükselir vs..
geniş bi zamanda geniş bir döküman hazırlayalım bence aspyi yaşatmak yeni nesillere aktarmak lazım :d
-
teşekkürler pesimistzombie nin dediği gibi geniç kapsamlı bi döküman güzel olur
-
pesimistzombie
yorumun için teşekkürler.
tabi ki hocam yazdıklarım başlangıç düzeyinde kullanıcılar için.
aslında performans ve güvenlik konusunda sıkı bi döküman olsa hiç fena olmaz.
-
güzel döküman elien sağlık
