ASP; Script Güvenligi
Çeviren : acrophobia
Bazi internet kullanicilari , Database de kayitli bilgilerinizi ögreme veya sitenize zarar verme girisiminde bulunabilirler. Bu girisimleri bir nebze olsun engellemek için kullandiginiz ASP scriptlerinde bazi noktalari güçlendirerek, Sisteme girislerini engellemis olabilirsiniz. Kullanicilar genellikle; Sisteme karisik bilgiler girerek sistemi yorma ve açik yaratmaktan ibarettir. Bu doküman kisas olarak bu saldirilardan nasil korunacaginizi anlatiyor.
Request Method Kullanimi
Bazi programcilar script yaziminda Request() komutunu kullanirlar ama bu güvenli bir yöntem degildir. Güvenli olmasini saglamak için REQUEST_METHOD komutunu kullanabiliriz. Bu komut sadece;
· ServerVariables
· QueryString
· Form
· Cookie
· ClientCertificate
Nesneleri ile kullanilabilir.
Herhangi bir form kullaniminda kullanilan “Hidden” yani gizli bilgiler, baskalari tarafindan degistirilerek kullanilabilir. Bazi acemileri kandirmak içinse GET yerine POST kullanarak formlari tasiyabiliriz, ama bunu da sezen kullanicilar mutlaka olacaktir. Bu nedenle kisa bir örnek kod vermek istedim.
Form Sayfasi
<form method="POST" action="processform.asp">
<input type="hidden" name="uyeid="<%=Rs("uyeid")%>">
Yeni Mail : <input type="text" name="Email">
<input type="submit">
</form>
Processform.asp
strUyeId = Request.Form("uyeid")
strYeniMail = Request.Form("Email")
Buraya kadar gayet güzel ama form sayfasindaki gizli alani alan kullanici bu kodlari alip da HTML derleyicisi kullanarak kendine göre degistirip istedigi bilgiyi sizin processform.asp dosyasina gönderebilir. Ama bunu da engellemek için "REQUEST_METHOD". komutunu kullanacagiz. Kullanmamizda ki amaç ise kullanicinin bize gönderdigi bilgiler GET seklinde gönderirse islemi durdurmaktir.
Bu komut Request.ServerVariables() standartlarinda kullanilir.
If Request.ServerVariables("REQUEST_METHOD") <> "POST" Then
Response.End
End If
Bu kod; Eger gelen bilgiler "POST" komutu ile geliyorsa devam et, gelmiyorsa islemi durdur, anlamina geliyor.
Check Referer (Gönderen kontrolü)
Çogumuz Mynet ve Domaindlx gibi hostlarda kullanilan dosyalari baska bir adresten neden ulasilamadigini merak ediyoruz, Bu sadece birkaç kod dizisinden ibaret oldugunu ögrenince içim rahatladi. Burada kullanilan ise http protokolünü yeterli seviyede kullanmaktir.
HTTP_REFERER sayfaniza nerden gelindigini anlatan bir ASP nesnesidir. Bu nesne ile REQUEST_METHOD birbirine yakin nesnelerdir. Simdi yazacagimiz kod dizisi ise, FORM ve QueryString nesneleri gelen bilgilerin kendi alan adinizdan mi yoksa baska bir alan adindan mi geldigini kontrol edecektir.
Public Function CheckReferer()
On Error Resume Next
Dim strHost, strReferer, blnCheckReferer
strHost = Request.ServerVariables("HTTP_HOST")
strReferer = Request.ServerVariables("HTTP_REFERER")
strReferer = Right(strReferer, Len(strReferer) - (InStr(1, strReferer, "://") + 2))
strReferer = Left(strReferer, InStr(1, strReferer, "/") - 1)
If strReferer = strHost Then
blnCheckReferer = True
Else
blnCheckReferer = False
End If
CheckReferer = blnCheckReferer
End Function
Gelen Bilgi Kontrölü
Formlarla beraber gelen bilgilere karsilik olarak DB’den bir bilgi istendigi zaman küçük bir bilgi kontrolü yapmak, kolay ve saglam bir güvenlik kosuludur. Burada yapilan islem ise formdan gelen bilginin bir sayi olup olmadigini kontrol etmek ve eger bir sayi degil ise girdiyi 0 yapip formdan gelen bilgiyi sinirlamaktir..
If strUyeId = "" OR IsNumeric(strUyeId) = False OR strUyeId < 0 Then
strUyeId = 0
End If
Bilgiler korumak için formdan gelen bilgileri düzenlemeye devam ediyoruz. Siradaki islem formlarda kullanilan herhangi bir ters isleme neden olabilecek yanlis karakterlerin kontrolünü yapmak. Bunuda asagida belirtilen sekilde yapiyoruz. Herhangi bir dizin yolu, dosya yolu belirtmesini engellemek için "../", Dblerle islem yapilamamasi için "--", ";", ve SQL komutlari yani "SELECT", "INSERT"<, >"UPDATE", "DELETE", vs. Sonra bosluk ve Tirnak isaretlerinin kontrolünü yapmak gerekir. Ve son olarak HTMLEncode komutu ile formlarda herhangi bir html komutu kullanmalarini engellemektir.
strData = Replace(strData, "../", "")
strData = Replace(strData, "--", "")
strData = Replace(strData, ";", "")
strData = Replace(strData, "", "")
strData = Server.HTMLEncode(strData)
Bu seferlik bu kadar çeviri yeter, Yeni çeviriler çok yakinda gelecek, ama isterseniz asagida bazi linkler var oralari kontrol edebilirsiniz.
Kaynak : http://www.infinetsoftware.com/content/securescripts.asp
--------------------------------------------------------------------------------