Sql Enjeksiyon Nedir, Nasıl Korunulur?

Bu dökümanda öncelikle Sql Injection'un ne olduğu açıklanacak, daha sonrada bu açığa karşı koymak için örnek bir filtre yazılacaktır. Dökümanda kullanılacak programlama dili Asp'dir.

Sql enjeksiyon nedir?

Web tabanlı programlama dillerinde veri tabanına bağlanırken ve veri sorgularken Sql komutlarını kullanırız.

Örneğin :
 
<% request.QueryString("id") %> ve <% Request.Form("kadi") %>

Bildiginiz gibi sql komutları," ' ", " " ", " or ", " Or " gibi karakter ve komutlardan oluşur. Örnekte görülen Request.Form("kadi") filitrelenmedigi için kullanıcı adı ve şifre yerine = or ""="" yazılarak ilk kullanıcı adı ve şifresi seçtirilerek, admin girişi yapılabilir.

Sql enjeksiyondan korunma?

1-)Fonksiyonlar

<%
Function koru(data)
data = Replace (data ,"`","",1,-1,1)
data = Replace (data ,"=","",1,-1,1)
data = Replace (data ,"&","",1,-1,1)
data = Replace (data ,"%","",1,-1,1)
data = Replace (data ,"!","",1,-1,1)
data = Replace (data ,"#","",1,-1,1)
data = Replace (data ,"<","",1,-1,1)
data = Replace (data ,">","",1,-1,1)
data = Replace (data ,"*","",1,-1,1)
data = Replace (data ,"/","",1,-1,1)
data = Replace (data ,"\","",1,-1,1)
data = Replace (data ,"And","",1,-1,1)
data = Replace (data ,"'","",1,-1,1)
data = Replace (data ,"Chr(34)","",1,-1,1)
data = Replace (data ,"Chr(39)","",1,-1,1)
data = Replace (data ,"or","",1,-1,1)
data = Replace (data ,"Or","",1,-1,1)
data = Replace (data ,"OR","",1,-1,1)
data = Replace (data ,"oR","",1,-1,1)
data = Replace (data ,"where","",1,-1,1)
data = Replace (data ,"Where","",1,-1,1)
data = Replace (data ,"WHERE","",1,-1,1)
data = Replace (data ,"+","",1,-1,1)
koru=data
End Function
%>

Burda ki kodda görüldügü gibi fonksiyonumuz koru adında  ve belirli karakterler filitreleniyor

Şimdi peki request.QueryString("id") 'de bundan nasıl korunucaz nasıl yapıcaz şimdi;

kodladıgımız sayfaya fonksiyonu koyuyoruz ister include ile ister normal şekilde
ve <% koru(request.QueryString("id")) %> burda parantez içine aldıgımız querystring imiz parantez dışında kalan koru ise daha once açtıgımız fonksiyonumuzun adı bu fonksiyonu kullanarak sql komutlarını süzmekle kalmayız aynı zamanda xss açığınıda kaparız

Peki formlardaki veri çekilirken nasıl süzüce

<% koru(request.form("kadi") ) %> gördügünüz gibi koru fonksiyonumuz ile sql veya xss karakterlerimiz formdan gelen bilgileri filitrelettiriyoruz

2-) Not Isnumeric ile koruma

Burda QueryString imiz sadece numaralı ile kullanabiliriz QueryString eğer har içeriyorsa sadece fonksiyon kullanılmalıdır
şimdi sadete gelelim

<% if (not Isnumeric(request.QueryString("id"))) then %>
<% Response.Redirect "hata.asp" %>
<% end if %>

Burda eğer id adında QueryString imiz numara değil ise hata.asp sayfasına yönlendir demek oluyor bu koruma yöntemide sql enjektede işe yaramakda ama dediğim gibi eğer QueryString sadece sayılı is QueryString harf içerense fonksiyon kullanmalısınız.

İyi çalışmalar dilerim.
Arkın Fescioğlu

Tarih:
Hit: 3686
Yazar: arkinfes

Taglar: sql enjeksiyon nedir nasıl korunulur?


Yorumlar


Siftahı yapan siz olun
Yorum yapabilmek için üye girişi yapmalısınız.