ASP ile SQL Injection açıklarına karşı Replace fonkisyon örneği
SQL Injection açığı adından da anlaşılabileceği gibi var olan bir sql kodun içerisine dışarıdan başka bir kod enjekte etmektedir , başka bir deyişle sql kodunu asıl amacının dışında başka bir amaç için kullanmaktır.
Örnekleyecek olursak :
Username : ilhan
Password : 0212
Şeklindeki kullanıcı girdisi aşağıdaki SQL Deyimini oluşturacaktır;
SELECT count(*) FROM Users WHERE Username = 'ilhan' AND Password ='0212'
İlk bakışta sorun olmayan bir SQL Deyimi... Fakat saldırganın;
Username : ilhan
Password : ‘ OR 1=1--
Şeklindeki girdilerle oluşturacağı SQL Deyimi ise;
SELECT count(*) FROM Users WHERE Username = 'ilhan' AND Password ='' OR 1=1 --'
Olacaktır ki, bu durumda girişin sağlanması için şart “ilhan” kullanıcı adına ait şifrenin
hiçbirşey* olması veya ikinci bir opsiyon olarak 1=1 eşitliğinin sağlanmasıdır.
nasıl korunmalı :
<%
Function Temizle(deger)
If deger = "" Then Exit Function
deger = Replace(deger, "<", "<")
deger = Replace(deger, ">", ">")
deger = Replace(deger, "[", "[")
deger = Replace(deger, "]", "]")
deger = Replace(deger, """", "", 1, -1, 1)
deger = Replace(deger, "=", "=", 1, -1, 1)
deger = Replace(deger, "'", "''", 1, -1, 1)
deger = Replace(deger, "select", "select", 1, -1, 1)
deger = Replace(deger, "join", "join", 1, -1, 1)
deger = Replace(deger, "union", "union", 1, -1, 1)
deger = Replace(deger, "where", "where", 1, -1, 1)
deger = Replace(deger, "insert", "insert", 1, -1, 1)
deger = Replace(deger, "delete", "delete", 1, -1, 1)
deger = Replace(deger, "update", "update", 1, -1, 1)
deger = Replace(deger, "like", "like", 1, -1, 1)
deger = Replace(deger, "drop", "drop", 1, -1, 1)
deger = Replace(deger, "create", "create", 1, -1, 1)
deger = Replace(deger, "modify", "modify", 1, -1, 1)
deger = Replace(deger, "rename", "rename", 1, -1, 1)
deger = Replace(deger, "alter", "alter", 1, -1, 1)
deger = Replace(deger, "cast", "cast", 1, -1, 1)
Temizle = deger
End Function
%>
Kullanımı:
Formdan ir veriyi çekerken öncelikle fonkiyona gönderilip zararlı karakterler replace edilmeli
<% strSifre = Temizle(Trim(Request.Form("parola"))) %>