Gönderen Konu: ASP’de SQL Injection Ataklarından Korunmak 1  (Okunma sayısı 222 defa)

GuvenliHost

  • Yönetici
  • Kahraman Üye
  • *****
  • İleti: 514
  • Karma +10/-0
    • Profili Görüntüle
ASP’de SQL Injection Ataklarından Korunmak 1
« : 01 Şubat 2009, 21:01:55 »
Eğer ASPi
tabanlı bir sistem kullanıyor ve veritabanıyla da haşır neşir iseniz kesinlikle
kendinizi güvenceye almalısınız. Bunun için iki tane ufak kod yeterlidir.  1. Kodumuz:
 <%
 IF Not IsNumeric(Request.QueryString("id"))
THEN
 Response.Write "SQL Injectioni Atağı Tespit
Edildi!"
 Response.End
 END IF
 %>
 Bu kodumuzu
hayat diline uyarlarsak; “id” QueryString’i eğer Numeric (Sayısal) bir değer
değilse ekrana “SQL Injection Atağı Tespit Edildi!” yazdır ve geri kalan tüm
işlemleri durdur. Bu kodumuzu id QueryString’imizi almadan hemen önceki satıra
yazmalısınız.
  Örneğin;
 <%
 IF Not IsNumeric(Request.QueryString("id"))
THEN
 Response.Write "SQL Injection Atağı Tespit
Edildi!"
 Response.End
 END IF
 
 id=Request.QueryString("id")
 
 Set kayit_setiniz=Server.CreateObject("adodb.recordset")
 SQL="Select * From musteri Where id="
& id
 kayit_setiniz.open SQL,bag,1,3
 %>
  2. Kodumuz:
 <%
 IF kayit_setiniz.eof THEN
 Response.Write "İstediğiniz Veri
Bulunamadı!"
 Response.End
 END IF
 %>
 Bu kodumuz
ise eğer veritabanından istenilen herhangi bir veri bulamaz ise ekrana
“İstediğiniz Veri Bulunamadı!” yazdırarak geri kalan tüm işlemleri durduruyor.
Bu kodumuzu da QueryString’imizi alıp gerekli tablo bağlantısını yaptıktan
hemen sonra ki satıra yazıyoruz;
 <%
 id=Request.QueryString("id")
 
 Set kayit_setiniz=Server.CreateObject("adodb.recordset")
 SQL="Select * From musteri Where id="
& id
 kayit_setiniz.open SQL,bag,1,3
 
 IF kayit_setiniz.eof THEN
 Response.Write "İstediğiniz Veri
Bulunamadı!"
 Response.End
 END IF
 %>
 Peki bunun
SQL Injection ile ne alakası var? Derseniz, işte cevabı; saldırgan
dosya_adi.asp?id=3 gibi bir yere saldıracağı zaman klasik hata verdirme yöntemi
olan ‘a yı dener başarılı olamaz ise id QueryString’ine olmayan sayısal bir
değer girer; dosya_adi.asp?id=99999999 gibi eğer verdiğim ikinci kod gibi bir
koruma şekil yok ise veritabanı hata verir ve oluşan hata ile veritabanından
kolayca veri çekilebilinir. Böylece saldırgan amacına ulaşmış olur.
 Son olarak
kodlarımızın son hali şu şekildir;
 <%
 IF Not
IsNumeric(Request.QueryString("id")) THEN
 Response.Write "SQL Injection Atağı Tespit
Edildi!"
 Response.End
 END IF
 
 id=Request.QueryString("id")
 
 Set rs=Server.CreateObject("adodb.recordset")
 SQL="Select * From musteribi Where id="
& id
 rs.open SQL,bag,1,3
 
 IF kayit_setiniz.eof THEN
 Response.Write "İstediğiniz Veri
Bulunamadı!"
 Response.End
 END IF
 %>
 2. yazımda formdan gelen verileri SQL Ijection'a karşı temizleyi göstereceğim. Herkese başarılar diliyorum.



Kaynak :olympos.org