THT DUYURU

Web & Server Güvenliği Doğru web ve veritabanı sunucusu güvenliği sağlanmadan, bilgisayar korsanları hassas verilerinize erişebilir. Web, Sunucu ve veritabanı güvenliğini nasıl sağlayacağınızı buradan öğrenebilirsiniz.

chat
Seçenekler

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

ImMadara - ait Kullanıcı Resmi (Avatar)
Forumdan Uzaklaştırıldı
Üyelik tarihi:
06/2013
Nereden:
kocaeli
Mesajlar:
168
Konular:
71
Teşekkür (Etti):
12
Teşekkür (Aldı):
26
Ticaret:
(0) %
04-11-2013 21:37
#1
Merhaba arkadaşlar ASP'de Regex ile SQL İnjection önlemeyi ve tespit etmeyi anlatacağ
querystring = Request.ServerVariables("QUERY_STRING")
02
if querystring <> "" then
03
' 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:
04

05
pattern = array("=","&","%","!","#","\?","<",">","\*","/","\",",",";","and","union","select","where","like ","from","update","insert","order","group","alter" ,"add","modify","rename",Chr(34),Chr(39))
06
burada sql injectiona neden olabilecek karakterleri regex'de de ifade edilecebilecek şekilde bir diziye aktardık
07
Set RegExp = New RegExp 'yeni regex nesnemizi oluşturuyoruz
08
RegExp.IgnoreCase = True ' Büyük-küçük harf duyarlılığını kaldırdık
09
RegExp.Global = True ' Tüm eşleşmeleri aramasını sağladık
10
for i = 0 to 28
11
if i = 0 then
12
desen = pattern(i)
13
else
14
desen = desen&"|"&pattern(i)
15
end if
16
Next
17
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
18
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)
19
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
20
yanında "|" işaretleri ve yeni elemanları ekliyoruz.
21
Sonuç olarak desenimiz "dizielemanı1|dizielemanı2|dizielemanı3|dizieleman ı4..." şeklinde olacak.. Regex desenimizde "|" işaretini kullanarak dizimizdeki stringlerden en az birinin
22
url'mizde olup olmadığını sorugulatacağız.
23
RegExp.Pattern = desen 'desen değişkenimizi regex nesnemizin desen niteliğine atadık
24
parcala = split(querystring,"=") ' Burada Querystring'imizi parçalıyoruz.Çünkü bize "="den sonraki yer lazım.
25
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.
26
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-
27
tüm eşittirlerle beraber ilk "eşittir" işaretinden sonraki querystringimizi alacağız
28
diziboyut = ubound(parcala)
29
for e = 1 to diziboyut
30
if qUrl<>"" then
31
qUrl = qUrl&"="&parcala(e)
32
else
33
qUrl = parcala(e)
34
end if
35
Next
36
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..
37
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 ..
38

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

43
Böylelikle Reqular Expressions(Düzenli ifadeler) yapısıyla URL kaynaklı SQL injection'ı tespit etmiş ve önlemiş olduk.
ImMadara - ait Kullanıcı Resmi (Avatar)
Forumdan Uzaklaştırıldı
Üyelik tarihi:
06/2013
Nereden:
kocaeli
Mesajlar:
168
Konular:
71
Teşekkür (Etti):
12
Teşekkür (Aldı):
26
Ticaret:
(0) %
04-11-2013 21:37
#2
alıntıdır

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler