Injection Flaws
Dinamik SQL sorgularının kullanıldığı sistemlerde oluşabilecek bir açıktır.
Bir kullanıcı adı parola sınaması yapılan SQL cümleciğinde kullanılabilir.
Select MemberID
From Member
Where Username = '" + txtUsername.Text + "' and Password = '" + txtPassword.Text + "'"
Şeklinde bir SQL cümlesinin kullanıldığı bir sistemde aşağıdaki ifadeleri girelim
txtUsername.Text : ' or 1=1 --
txtPassword.Text : 123
ifadesi aşağıdaki SQL cümlesinin çalıştırılmasını sağlar
Select MemberID
From Member
Where Username = ' ' or 1=1 -- ' and Password = '" + txtPassword.Text + "'"
-- ifadesi SQL Server için yorum satırı anlamına geldi için çalıştırılmaz.
Where ifadesini inceleyelim :
Username = ' ' false döner, 1 = 1 ise true. Or karşılaştırmasında ise False or True’nun sonucu true’dur. Dolayısıyla doğru kullanıcı adı parola girilmese dahi geriye tüm kayıtlar döner ve saldırgan ilk kaydın yetkisi ile içeriye giriş yapmış olur.
Saldırgan “SQL Injection” yöntemi ile veritabanı hakkında daha detaylı bilgi edinebilir. SQL Server üzerinde System Administrator hesabı açabilir, Tüm Tabloların listesini ve bu tabolardaki bilgilere ulaşabilir. Hatta web uygulaması sa yetkisine sahip bir kullanıcı ile çalıştırılıyorsa xp_cmdshell ‘format C:’ ile sisteme format bile atabilir.
Dinamik SQL sorgularındaki bu içeri sızmaları engellemenin yolu parametre kullanmaktır.
Bunu SqlCommand nesnesine SqlParameter tipinde parametre ekleyerek yapabiliriz.
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "[ ConnectionString ]";
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = " Select MemberID"
+ " From Member"
+ " Where Username = @username and Password = @password";
cmd.Parameters.AddWithValue("@username",txtUsername.Text);
cmd.Parameters.AddWithValue ("@password",txtPassword.Text);
conn.Open();
int MembetID = Convert.ToInst32(cmd.ExecuteScalar());
conn.Close();
Bu şekilde kullandığımız dinamik SQL sorgularında Injection yönetimini bertaraf etmiş oluruz.
Kaynaklar
http://www.owasp.org/index.php/Top_10_2007-A2
http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdf
http://www.mutasyon.net/makaleoku.asp?id=728
SQL Injection - Injection Flaws
18 Aralık 2007Gönderen Aslı zaman: 21:29
Etiketler: ASP.NET-AJAX, Örnekli-Resimli Anlatım, SQL
Kaydol:
Kayıt Yorumları (Atom)
3 yorum:
teşekkürler.elinize sağlık
faydalı makale için teşekkürler
tesekkürler asli hanim.su ana kadar okudugum yazilariniz bana cok sade ve yeterli geldi.çok çok sagolun.sizi takip edicem:))
Yorum Gönder