Asp Scriptlerde Hala Sql İnjection Açığı Çok Sık Rastlamaktayız.Bir Çok Kişi Tarafından Bilinen Uygulamalardır.
Diyelim ki verimizi Request.QueryString olarak olmaktayız ve yazdırmaktayız. Linkimizi haber.asp?id=500 olarak farzedelim. Burada veri çekerken programlamacı where id=”&request.querystring(“id”)&”" diye veriyi çekmektedir. Fakat bu büyük bir SQL açığı oluşturmaktadır.
Kullanıcı grup bu linki haber.asp?id=500+union+select+0,kadi,2,3+from+uyel er gibi yazdığında kullanıcı adı ve şifresi ortaya çıkacaktır. Şimdi ise bunu önleyen fonksiyonumuzu yazalım.
01 <%
02 Function QueryFilter(Str)
03 Str = Replace(Str, \"*\", \"[INJ]\",1,-1,1)
04 Str = Replace(Str, \"=\", \"[INJ]\",1,-1,1)
05 Str = Replace(Str, \"<\", \"[INJ]\",1,-1,1) Str = Replace(Str, \">\", \"[INJ]\",1,-1,1)
06 Str = Replace(Str, \";\", \"[INJ]\",1,-1,1)
07 Str = Replace(Str, \"(\", \"[INJ]\",1,-1,1)
08 Str = Replace(Str, \")\", \"[INJ]\",1,-1,1)
09 Str = Replace(Str, \"+\", \"[INJ]\",1,-1,1)
10 Str = Replace(Str, \"#\", \"[INJ]\",1,-1,1)
11 Str = Replace(Str, \"'\", \"[INJ]\", 1, -1, 1)
12 Str = Replace(Str, \"&\", \"[INJ]\", 1, -1, 1)
13 Str = Replace(Str, \"%\", \"[INJ]\", 1, -1, 1)
14 Str = Replace(Str, \"?\", \"[INJ]\", 1, -1, 1)
15 Str = Replace(Str, \"´\", \"[INJ]\", 1, -1, 1)
16 Str = Replace(Str, \",\", \"[INJ]\",1,-1,1)
17 Str = Replace(Str, \"UNION\", \"[INJ]\",1,-1,1)
18 Str = Replace(Str, \"SELECT\", \"[INJ]\",1,-1,1)
19 Str = Replace(Str, \"WHERE\", \"[INJ]\",1,-1,1)
20 Str = Replace(Str, \"LIKE\", \"[INJ]\",1,-1,1)
21 Str = Replace(Str, \"FROM\", \"[INJ]\",1,-1,1)
22 Str = Replace(Str, \"UPDATE\", \"[INJ]\",1,-1,1)
23 Str = Replace(Str, \"INSERT\", \"[INJ]\",1,-1,1)
24 Str = Replace(Str, \"ORDER\", \"[INJ]\",1,-1,1)
25 Str = Replace(Str, \"GROUP\", \"[INJ]\",1,-1,1)
26 Str = Replace(Str, \"ALTER\", \"[INJ]\",1,-1,1)
27 Str = Replace(Str, \"ADD\", \"[INJ]\",1,-1,1)
28 Str = Replace(Str, \"MODIFY\", \"[INJ]\",1,-1,1)
29 Str = Replace(Str, \"RENAME\", \"[INJ]\",1,-1,1)
30 Str = Replace(Str, Chr(39), \"[INJ]\", 1, -1, 1)
31 If InStr(1,Str,\"[INJ]\",1) then
32 Response.Redirect \"Default.asp\"
33 end if
34 QueryFilter = Str
35 End Function
36 %>
Kullanımı :
1 <% id=QueryFilter(Request.QueryString(\"id\")) %>
Böylece id değişkenine fonksiyonun uyarlanmış halini atamış olduk.
Veri çekerken yazacağımız şekli;
1 ....where id=\"&id&\"\"
şeklinde yazarsak bütün tehlike ortadan kalkmakta ve kişi Default.asp sayfasına yönlenmektedir.