Veritabanı sql İnjection
Evet arkadaşlar
bildiğiniz üzere son zamanlarda basit bir yanıltma ile veritabanına
sızma işlemleri çok büyük ölçüde arttı ve malesef bir çok site henüz
bu açıkları kapatmış veya önlem almış değil.şimdi size en basit
açıktan komplexe dogru ayrıntılı şekilde alınacak önlemleri
anlatacağım..
1.Örnek
kullanıcı form alanına Kod Alanı:
or a=a
bu yazıyı girerse bunun anlamı şudur..
sql cümlesine bakacak olursak :
Kod Alanı:
select count(* ) from tablo where user=Arhan
and userPass=
or a=a
veritabanında tablo adlı tablodan user sütunu Arhan olan userpass
sütunu boşluk olan veya her halikarda a=a ya eşit olacagı bir deger
çağırır.ve kullanıcı kolaylıkla oturum acabilir..Ne Kadar Kolay
Değilmi?
Şimdi Gelin bu açığı kapatalım..
evet arkadaslar...Formumuzun postlayacağı sayfa session.asp olsun
simdi db connectionları ve rsleri kurdugunuzu farzedip gerekli
kodlamaya geçecegim..
ilk önce.. Formdan Gelen Verilere Değişken atıyoruz..
Kod Alanı:
user =server.htmlencode(Request.Form("user" )
)----->formdaki textfield valuesunun user oldugundan emin olun..
Kod Alanı:
pwd =server.htmlencode(Request.Form("pwd"
) )
------>formdaki textfield valuesunun pwd oldugundan emin olun..
geliyoruz kilit ifadeye:
Kod Alanı:
<% if instr (pwd,"" ) > 0 or instr (pwd,"="
)>0 then response.redirect "nodoor.asp" end if %>
<% if instr (user,"" ) > 0 or instr (user,"=" )>0 then response.redirect
"nodoor.asp" end if %>
ve kilit ifadede her 2 form alanından gelecek muhtemel açığı
kapatmış olduk..kilit ifadenin anlamı şudur:
Eğer pwd içeriyorsa veya pwd = içeriyorsa sayfayı nodoor.asp ye
yönlendir...
aynı durumu 2.ifade içinde uyarlayabilirsiniz..
bu dersin amacı tamamiyle güvenliği sağlamak içindir..lütfen bu
açığı kapatmayan arkadaşlar bir an önce kapatsın..
herkese saygılar ve sevgiler..daha gelişmiş diğer açıklarla ilgili
korumaları başka bir derste vereceğim..
|