Şub
26Veritabanından verilerimizi çekerken sql sorgulama dilini kullanıyoruz. Peki önlemini almadıktan sonra bu olay ne kadar güvenli olabilir ?
Örneğin üyelik sistemleri, yada sayfa adresinde bulunan verinin kimlik'leri vb...
Eğer sayfa.asp?id=5 vb. adresinden değer alıp sonra bu değer ile veritabanından veri çekiyorsanız ve sql enjeksiyonu önlemini almamışsanız sitenizde açık var demektir.
Örnek:
Farzedelim sayfa.asp?id=4 sayfasındayız.
id=request.querystring("id") ' sayfa adresinden id çekiliyor.
Sql="select * from kayitlar where id="&id&""
Set rs=baglanti.execute(sql)
%>
Bu şekilde veritabanından id'si 4 olan kaydı seçer. Çünkü sayfa.asp?id=4 konumundayız. Yani id'yi sayfa adresinden çekiyor. Biz sayfa adresinde id stringine başka bir sql kodu yazarsak onu alır.
Mesela
sayfa.asp?id=4 or id=5 or id=6
vb... Bu sql kodunu veritabanında çalıştırır. Bu sql kodu zararsızdır ama kullanıcılar zararlı sql kodları girecektirler. Burada o kodları veremiyoruz.
Önlemi:
id=request.querystring("id") ' sayfa adresinden id çekiliyor.
if isnumeric(id)=false then ' id numerik değilse
Response.Write "Güvenlik Sistemi Devrede"
Else 'değilse
Sql="select * from kayitlar where id="&id&""
Set rs=baglanti.execute(sql)
End if
%>
Bu şekilde sadece sayısal bir değer girmesini sağlarız.
Eğer değer sayısal değilse işlemi durduruyoruz.
şimdide üyelik girişlerine bakalım.
Genelde iki adet kutucuk bulunur. Kullanıcı adı ve şifresi diye.
Girilen bilgiler bir sayfada işletilir. Eğer tabloda bu kullanıcı adına ve şifresine uyan bir veri varsa giriş yaptırırız. Bunuda sql sorgusu ile gerçekleştiririz.
isim=request.form("isim") 'kullanıdı adı
sifre=request.form("sifre") 'şifre
Sql="select * from uyeler where isim='"&isim&"' and sifre='"&sifre&"'"
Set rs=baglanti.execute(sql)
%>
Sql sorgusunda kullanıcı adı ve şifresini sorgulatıyoruz. Dikkat ettiyseniz and komutunu kullandık. Yani girilen değere uyan kullanıcı adı ve şifre aramasını sağladık. Eğer or kullansaydık kullanıcı adı veya şifresini aratırdık. Mantıken şifre yanlış olsa bile kullanıcı adı olduğundan giriş yapar. Yada tam tersi şifre doğruyken kullanıcı adı yanlış olursa giriş yapar.
Sanırım or ve and komutun farkını anladık.
Sql sorgusuna değerler kutucuklardan geliyor. Yani biz giriyoruz.
Eğer kutucuğa zararlı bir sql kodu girersek sql sorgusunda çalıştırılır.
Mesela iki kutucuğada 'or' yazarsak and yerine or deyimi çalıştırmış oluruz.
Dolayısıyla giriş yapılır.
Önlemi:
Function temizle(gelenveri)
if gelenveri="" then exit function
gelenveri=replace(gelenveri,"or","")
gelenveri=replace(gelenveri,"and","")
gelenveri=replace(gelenveri,"'","")
temizle=gelenveri
End Function
%>
Kullanımı:
Verilerimizi çekerken bu fonksiyondan geçmesini sağlayacağız.
isim=temizle(request.form("isim"))
sifre=temizle(request.form("sifre"))
%>
Etiketler : sql enjeksiyon injection or and replace function
İçeriği takip etSayfayı YazdırPermalink4 yorum var
#266.-xyz-06 Temmuz 2007 Cuma
yayınlamanıza gerek yok ama, ya kullanıcı adı orhan ise ve küçük harflerle yazmışsa, or zararlı ama sadece or un bir çok yazılışı var (Or, or, oR, OR, uzunlarda bu seçenek daha da artacak, insert gibi..) bu durumlarda ne olacak? sanırım bu önlemler yeterli değil, bu arada siteniz hem içerik hem de-özellikle tasarım açısından güzel olmuş, tebrikler
#495.-Inan Onder-15 Şubat 2008 Cuma
Sacmalamissin kuculk buyuk harf duyarliligi yok asp'de.. Sirf sallamissin mnkym
#557.-kemal aslan-03 Nisan 2008 Perşembe
bence de or kelimesi girdiğimizde kullanıcı adı orhan ise or kısmını silecek ve sadece han kalıcak. bence sadece ' ,", <, >, gibi karakterleri engellesek daha iyi olur. Çok güzel bir anlatım teşekkür ederiz.
#575.-Görkem Kösem-17 Nisan 2008 Perşembe
' karakteri temizlenmesi büyük bölümünü ekarte eder zeten
or içinde başında ve sonunda boşluk yada tırnak olan or'un temizlenmesi daha bir düzgün çalışmasını sağlar
gelenveri=replace(gelenveri," or ","")
gelenveri=replace(gelenveri,"'or'","")
yöneticileri tebrik ederim güzel bir site olmuş ilerde iyi bir kaynak olmaya aday
