Arkadaşlar merhaba,
SQL Injection hakkında kafama takılan bir soru var. Yardımlarınızı rica ediyorum.
Bu saldırı şekli sadece sorgulama yaparken mi etkin oluyor acaba?
Hani en basit haliyle: ' or '1' ='1 şeklinde yapılan saldırı sadece arama yaparken mi etkili olur.
Yani hiç bir arama olmayacak normal bir form alanına kayıt girerken de zararlı bu tarz kodlar?
Mesela; Rehber yaptığımızı düşünelim. Hiç bir sorguda kullanılmayan Adı yazan form alanına kullanıcı zararlı bir kod yazıp kaydetse ne olur?
umarım anlatabilmişimdir.
teşekkürler,
Asp SQL injection hakkında
14
●1.158
- 30-06-2013, 00:21:58Üyeliği durdurulduÖrnek vereyim;
1. login formu düşün. kullanıcı adı ve şifre isteniyor. eğer formun post edildiği kod betiğinde bu iki alan için kontrol yapılmamışsa kontrol sorguna inject olunabilir.
mesela formunda kullanici_adi ve sifre inputların olsun. kod betiğinde de sql sorgun şöyle:
sql = " SELECT * FROM uyeler WHERE kullanici_adi='"&Request.Form("kullanici_adi")&"' AND sifre='"&Request.Form("sifre")&"' "
sql de tek tırnak --> ' özeldir, stringler için belirteçtir. eğer sen kullanıcı adı alanına ' 1 or 1=1 -- yazarak gönderirsen tırnaklar sayesinde sorguya ek parametreler eklemiş olursun. 1=1 dediğin için de cevap otomatikman olumu dönecek ve login gerçekleşecek.
2. querystring'den de aynı şekilde. sayfan mesela haberoku.asp?ID=1 olsun.
sen sorgunun içine bu ID parametresinin karşılığı olan 1'i alacaksın.
sql = " SELECT * FROM haberler WHERE id = "&Request.Querystring("ID")&" "
1 olan kayıt gelir. eğer haberoku.asp?ID=1 UNION SELECT 0 FROM admin .... diye devam edip koda müdahale edebilirsin ve admin bilgilerine ulaşabilirsin. iyi sql bilmek gerekir.
umarım demek istediğimi anlamışsındır.
sql açıklarından nasıl korunurum diyorsan:
1. formdan ve query den gelen verileri filtreleyeceksin, tırnak işaretini &39a;ya çevireceksin.
2. queryden aldığın verilerde de aynı şekilde filtre yapacaksın, eğer sayı alıyorsan gelenin sayı olup olmadığını da kontrol edeceksin. mesela haberoku.asp?ID=1
If NOT IsNumeric(Request.Querystring("ID")) Then
Response.Write "DURRR"
Response.End
End If
bu şekilde ID nin sayı olup olmadığını kontrol edersin.
googleda araştır bu işi. hadi kolay gele. - 01-07-2013, 17:15:40ShekerChi detaylı bilgi için teşekkür ederim.
Ancak benim sorum bu değildi.
Injection nedir ve nasıl yapılır bunu öğrendim.
Ancak benim merak ettiğim kısmı, hiç bir sorguda yer almayacak ilave bilgi niteliğindeki form alanlarında da kontrol gerekli mi? Buradan da saldırı alınabilir mi?
Yani sorgu olsun olmasın, kaydedilen bütün alanları tek tek kontrol etmeli miyim, bunu merak ediyorum. Yoksa sadece sorgularda kullanılan alanları kontrol etsem yeterli mi?
tekrar teşekkürler, - 02-07-2013, 11:53:05SQL injection olmaz başka bir bug oluşur onu kullanırlar sistemine zarar verebilebilir.aset0n adlı üyeden alıntı: mesajı görüntüle
Daima kontrolleri yapınız. Eğer bir sayı çekiyorsanız sayı olup olmadıgını, eğer 5 karakterli bir yazı gelecekse 5 karakter uzunluğunda olup olmadığına kadar kontrolleri yapmanız sizin yazılımınızı güçlendirecektir.
İyi bir yazılımcı hatayı minimuma indirgemelidir. - 02-07-2013, 23:12:25Üyeliği durdurulduaçık senin kodlaman yüzünden oluşur, IIS ile alakası yok, üstte yazdığım cevabı anlayarak okumalısınoktayman adlı üyeden alıntı: mesajı görüntüle
- 02-07-2013, 23:26:07hımm anladım,ben konuyu farklı biliyormuşum if döngülerini de aynı şekilde etkiliyor sanıyordumShekerChi adlı üyeden alıntı: mesajı görüntüle
<% if request.form("B1")<>"" then if request.form("T1")="12345" then response.write "dogru" end if %> <form method="POST" > <p><input type="text" name="T1" size="20"> <input type="submit" value="Gönder" name="B1"> <input type="reset" value="Sıfırla" name="B2"></p> </form>bu kodlarda ' or 1=1 yazıyom neden olmuyor diyordum.
sadece sql için değil mi bu