SQL, Structured Query Language anlamýna gelir.. Yani Yapisal Sorgu Dil’i diye nitelendiririz..
SQL injection’ýn tanýmýna deðinelim..
SQL injection; SQL sorgusu ve komut gönderme yöntemidir.. 80. porta gereksinim duyan ve sunucuda kurulan iþletim sistemi yerine, sunucudaki sitelerin tabanlarýna (ASP, PHP, CGI, vs) baðlý olan sorgu sistemidir.. Örnek verecek olursak; sisteme üye olan userlarýn kullanýcý adlarý ve þifreleri veritabanýna kaydolur.. SQL injection sayesinde SQL sorgulamalarla veritabanýna kayýtlý user’larýn account’larýna eriþim saðlayabiliriz..
ASP tabanlý scriptlerdeki SQL Injection bug’larýndan korunmaktan bahsedeceðim..
Örneðin; ASP tabanlý bir websitemiz olduðunu düþünerek, haber.asp adlý dosyamýzýn olduðunu varsayalým.. Haber.asp sayfasýnýn detayý için açýlan haber_detay.asp?id=1 þeklinde bir gidiþat olsun.. Eðer vereceðim kodu; haber_detay.asp dosyasýna eklemezseniz, hackerlar tarafýndan ’ karakteri ile mssql SQL sorgulamalarla, bulunan haberlere rahatlýkla eriþebilirler..
Daha önce haber_detay.asp de bulunan kod “ID = REQUEST.QUERYSTRING(”ID”)” þeklinde ise;
ID = REQUEST.QUERYSTRING(”ID”) IF Not IsNumeric(REQUEST.QUERYSTRING(”id”)) THEN response.write “Lütfen Gecerli bir id numarasý girin.” response.end END IF
bu kodlarla deðiþebilirsiniz..
Ayrý bir metod olarak kullanmýþ olduðumuz formlardan ötürü ’ karakterini nasýl etkisiz hale getireceðimizden bahsedeceðim..
Örnek olarak form’larý kaydetmek için bulunan form.register.asp dosyasýndaki REQUEST.FORM kýsmýný bir üstte anlattýðým gibi güvenli hale getirmeniz gerekir.. Yani vereceðim fonksiyon kodlarýný, dosyada en üste koymanýz kafii..
Function KarakterTemizle(Veri) KarakterTemizle = Replace(Veri, “’”, “’’”) Veri = KarakterTemizle End Function
Bu fonksiyonu dosyaya yerleþtirdikten sonra vereceðim örnekle yanlýþ ve doðru yolu ayýrt edebileceksiniz..
Yanlýþ olan Hali: GelenVeri = REQUEST.FORM(”GelenVeri”)
Doðru hali: GelenVeri = KarakterTemizle(Request.Form(”GelenVeri”))
Bir baþka adýmla da yine bu form’lara etki eden kötü karakterleri engelleyeceðiz..
Yine üst kýsýmda bahsettiðim örnekteki gibi form’larý kaydeden form.register.asp dosyasý içinde bulunan REQUEST.FORM kodlarýný, vereceðim function’ý sayfanýn en üstüne býrakarak güvenlik altýna almanýz gerekmektedir..
Function KarakterTemizle(Veri) KarakterTemizle = Replace(Veri, “<”, “<”) KarakterTemizle = Replace(Veri, “>”, “>”) Veri = KarakterTemizle End Function
Bu fonksiyonu dosyaya yerleþtirdikten sonra vereceðim örnekle yanlýþ ve doðru yolu ayýrt edebileceksiniz..
Yanlýþ olan hali: GelenVeri = REQUEST.FORM(”GelenVeri”)
Doðru hali: GelenVeri = KarakterTemizle(Request.Form(”GelenVeri”))
Son olarak belirteceðim durum; gördüðünüz gibi bahsettiðim function’lar birbirine çok yakýn.. Her iki function’da da ayrý ayrý incelemeniz açýsýndan ayrý olarak verdim ki amaç; hatayý minimuma indirmek.. Her ikisini de birleþtirecek olursak doðru hali þu function’lar olur;
Function KarakterTemizle(Veri) KarakterTemizle = Replace(Veri, “’”, “’’”) KarakterTemizle = Replace(Veri, “<”, “<”) KarakterTemizle = Replace(Veri, “>”, “>”) Veri = KarakterTemizle End Function
Son olarakta;
GelenVeri = KarakterTemizle(Request.Form(”GelenVeri”))
haline gelir..
Saygýlar..
|