Sayfayı Yazdır | Pencereyi Kapat

SQL Injec. Security Story

Nereden Yazdırıldığı: Bilginin Adresi
Kategori: Bilgisayar Güvenliði / Computer Security
Forum Adı: Güvenlik / Security Makaleleri
Forum Tanımlaması: Bilgisayarýnýzý Her Türlü Saldýrýya Karþý Korumak Ýçin Yapmanýz Gerekenler
URL: https://www.bilgineferi.com/forum/forum_posts.asp?TID=7977
Tarih: 14-07-2024 Saat 01:57


Konu: SQL Injec. Security Story
Mesajı Yazan: megabros
Konu: SQL Injec. Security Story
Mesaj Tarihi: 24-08-2009 Saat 00:40

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..



Sayfayı Yazdır | Pencereyi Kapat