ASP’de SQL Injection Ataklarından Korunmak 1

Eğer ASP 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 Injection 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.

——————————————————————————–

CEVAP VER
Lütfen yazınızı giriniz.
Lütfen adınızı buraya giriniz.