ASP'de Regex ile SQL İnjection Tespit Etme ve Engelleme

Merhaba arkadaşlar ASP'de Regex ile SQL İnjection önlemeyi ve tespit etmeyi anlatacağım.

querystring = Request.ServerVariables("QUERY_STRING")
if querystring <> "" then 
' URL'deki querystringi aldık(query string url'nin sonunda yer alan, "?"'den sonra gelen "id=3" vb. "degisken=deger" kalıbında bulunan kısmıdır. Eğer url boş değilse yani doluysa:

pattern = array("=","&","%","!","#","\?","<",">","\*","/","\",",",";","and","union","select","where","like","from","update","insert","order","group","alter","add","modify","rename",Chr(34),Chr(39))
burada sql injectiona neden olabilecek karakterleri regex'de de ifade edilecebilecek şekilde bir diziye aktardık
Set RegExp = New RegExp 'yeni regex nesnemizi oluşturuyoruz
RegExp.IgnoreCase = True ' Büyük-küçük harf duyarlılığını kaldırdık
RegExp.Global = True ' Tüm eşleşmeleri aramasını sağladık
for i = 0 to 28
if i = 0 then
desen = pattern(i)
else
desen = desen&"|"&pattern(i)
end if
Next
Burada ise regex desenimizi oluşturacak döngüyü yazdık. dizide 29 elemanımız var, 0'dan başladığı için 28'e dek bir döngü oluşturduk.. eğer desen değişkenimiz
henüz değer almamışsa -ki zaten i=0 iken henüz bir değeri yok- dizimizdeki i indisli elemanı değişkene atıyoruz (bu durumda i=0 olduğu için ilk elemanımızı atamış oluyoruz)
ilk elemanı atadıktan sonra regex desenimiz eleman1|eleman2|eleman3 diye devam edeceği için sonraki adımlarda -yani i'nin 0'dan büyük olduğu durumlarda- değişkenimize değişkenin varsayılan değerinin
yanında "|" işaretleri ve yeni elemanları ekliyoruz.
Sonuç olarak desenimiz "dizielemanı1|dizielemanı2|dizielemanı3|dizielemanı4..." şeklinde olacak.. Regex desenimizde "|" işaretini kullanarak dizimizdeki stringlerden en az birinin 
url'mizde olup olmadığını sorugulatacağız.
RegExp.Pattern = desen 'desen değişkenimizi regex nesnemizin desen niteliğine atadık
parcala = split(querystring,"=") ' Burada Querystring'imizi parçalıyoruz.Çünkü bize "="den sonraki yer lazım.
Ancak burada sadece parçalamamız yetmez çünkü sadece parçalarsak "id=3+union+select...=..." querystring'inde eşittir'den sonraki kısmı alamayız.
Bunun için yine bir döngü yapacağız. querystring'imizdeki ilk "eşittir" işareti(id=...) hariç -bu da dizimizin 0 indisli elemanı olur bu yüzden döngüyü 1'den başlatıyoruz-
tüm eşittirlerle beraber ilk "eşittir" işaretinden sonraki querystringimizi alacağız
diziboyut = ubound(parcala)
for e = 1 to diziboyut
if qUrl<>"" then
qUrl = qUrl&"="&parcala(e)
else
qUrl = parcala(e)
end if
Next
sonuc = RegExp.Test(qUrl) 'RegEx desenimizin qUrl değişkenimizde olup olmadığını test ediyoruz ve varsa True yoksa False değer döndürecektir..
if sonuc = True then 'Burada da dönen sonucun doğru olup olmadığını kıyaslıyoruz ve buna göre işlem yaptırıyoruz ..

Peki bu işaretleri direk temizlemek istersek ne yapabiliriz? 
qUrl = Regex.Replace(qUrl,"")
Response.Redirect Request.ServerVariables("HTTP_HOST")&Request.ServerVariables("SCRIPT_NAME")&"?"&"querystringdekideğişkeininizinisimi"&"="&qUrl

Böylelikle Reqular Expressions(Düzenli ifadeler) yapısıyla URL kaynaklı SQL injection'ı tespit etmiş ve önlemiş olduk.
Tarih:
Hit: 3388
Yazar: Lightsaber

Taglar: asp'de regex ile sql injection tespit etme ve enge


Yorumlar


Yorum yapabilmek için üye girişi yapmalısınız.

Yorumlar

ShockMan tarafından yazıldı. Tarih: 12/Ağu/17 22:12
Valla hazır site scriptlerinde edit medit biraz uğraştım, iyi kötü webmasterlik felan yaptım, ama prof olarak bi ilgilenmek için iyi bir dökümanmış, benim ilgimi çekti nedense.