Eger ASP tabanlı bir sistem kullanıyor ve veritabanıyla da hasır nesir 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 Atagı Tespit
Edildi!"
Response.End
END IF
%>
Bu kodumuzu
hayat diline uyarlarsak; “id” QueryString’i eger Numeric (Sayısal) bir deger degilse ekrana “SQL Injection Atagı Tespit Edildi!” yazdır ve geri kalan tüm islemleri durdur. Bu kodumuzu id QueryString’imizi almadan hemen önceki satıra yazmalısınız.
Örnegin;
<%
IF Not IsNumeric(Request.QueryString("id"))
THEN
Response.Write "SQL Injection Atagı 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 "İstediginiz Veri Bulunamadı!"
Response.End
END IF
%>
Bu kodumuz
ise eger veritabanından istenilen herhangi bir veri bulamaz ise ekrana
“İstediginiz Veri Bulunamadı!” yazdırarak geri kalan tüm islemleri durduruyor. Bu kodumuzu da QueryString’imizi alıp gerekli tablo baglantı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 "İstediginiz Veri Bulunamadı!"
Response.End
END IF
%>
Peki bunun SQL Injection ile ne alakası var? Derseniz, iste cevabı; saldırgan dosya_adi.asp?id=3 gibi bir yere saldıracagı zaman klasik hata verdirme yöntemi olan ‘a yı dener basarılı olamaz ise id QueryString’ine olmayan sayısal bir deger girer; dosya_adi.asp?id=99999999 gibi eger verdigim ikinci kod gibi bir koruma sekil yok ise veritabanı hata verir ve olusan hata ile veritabanından kolayca veri çekilebilinir. Böylece saldırgan amacına ulasmıs olur.
Son olarak
kodlarımızın son hali su sekildir;
<%
IF Not
IsNumeric(Request.QueryString("id")) THEN
Response.Write "SQL Injection Atagı 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 "İstediginiz Veri
Bulunamadı!"
Response.End
END IF
%>
ALINTIDIR
ASP de SQL Injection Ataklarından Korunmak
- velociraptor
- Yottabyte4
- Mesajlar: 51207
- Kayıt: 14 Mar 2006, 02:33
- cinsiyet: Erkek
- Teşekkür etti: 12511 kez
- Teşekkür edildi: 9516 kez