SQL Injection

Bir aralar web'deki login sayfalarında veya bunabenzer yerlerde kullanılmış bir açıktı ama artık bu tip şeyler olacağını sanmıyorum bunlar eskide kaldı, artık birçok programcı bu tip açıkları düşünerek geliştirme yapıyorlar ya da umarım öyle yapıyorlardır. Neyse kısaca değineyim, konuyu burada anlatmayacağım meraklısı zaten SQL Injection yazarak detayını benden daha iyi anlatanlardan kolayca öğrenebilir.

Bir SQL cümlesini düşünün,

SELECT * from LoginUsers where UserName='ali' AND Password='KL0O9A2'

En basitinden bu, formunuza login olacak kişilerin login ekranındaki kontrolü ile ilgili olsun. Foruma girenlerden UserName ve Password istediniz, onlar girdi siz de SQL Sorgunuzu yaptınız onların üye olup olmadığını kontrol ettiniz. Buraya kadar herşey normal.
Sorgu string'i tam olarak aşağıdaki gibi olsun, kullanıcının input box lara girdiğini aldınız ve login işlemine başladınız,

strSorgu="SELECT * from LoginUsers where UserName='" & _
Request.QueryString("txtUsrName") & "'" & " AND Password='" & _
Request.QueryString("txtPasswd") & "'"

Evet doğrudan request.querystring ile inputbox'lardaki değerleri çektiniz.
Peki.. Kullanıcı txtUsrName ve txtPasswd inputbox'ına ' OR '1'='1 yazarsa neler olabilir biliyor musunuz? Query Aşağıdaki gibi çalışır :

SELECT * from LoginUsers where UserName='' OR '1'='1' AND Password='' OR '1'='1'

UserName = '' ve Password='' olanlar veya 1=1 ise getir. Yani tüm kayıtlar gelir. Böylece sizin güvenliğiniz ilk adımda geçersiz olur.
Peki.. admin ' -- yazarsa ne olur? (-- yazımı SQL sorgusunda comment demektir).
Query aşağıdaki gibi olur.

SELECT * from LoginUsers where UserName='admin'

Evet. SQL Injection örnekleri SQL bilginizle doğru orantılı olarak artar isterseniz karmaşık sorgular koyabilir bir tabloyu komple uçurabilirsiniz bile (DROP ile).

Şimdilik bu kadar ..

Yorumlar

Bu blogdaki popüler yayınlar

Container Nedir? Docker Nedir? MongoDB Container Kurulum Örneği

Discriminative ve Generative Modeller

Olasılık Kuralları