Ana Sayfa
Forumlar
Blog
Hakkımızda
Yükleniyor. Lütfen bekleyin ...
Kategoriler
ASP.NET
ADO.NET
Visual Basic .NET
Visual C# .NET
Visual Studio ve Araçlar
Windows Server System
Office System
.NET Framework
SQL Server
XML Web Servisleri
Yazılım Güvenliği
Yazılım Mühendisliği
Mobil Teknolojileri
Dynamics
Smart Client
Expression Studio
Silverlight
Kod Parçaları
Açık Kaynak Kodlu Uygulamalar
İş Zekası
Windows Mobile Embedded
0
Çıkış Yap
Üyelik Bilgilerimi Güncelle
Seminerlerim
Favorilerim
Ajanım
Yazgeliştir
Yazar olmak ister misiniz?
Forumlar
Kitap Önerileri
Haberler
Röportajlar
Yazarlar
İpuçları
Görüşleriniz
Hakkımızda
İstatistikler
En son kayıt olan üye:
ftonak
Şuanki online üyeler (
6
) :
ftonak
,
fatihbilmuh
,
SilahSor1907
,
modali2008
,
v3npa_
,
tayfunatas
Yazılım Güvenliği Kategorisi
»
Injection Flaws
Injection Flaws
Print Versiyonu
Yazar:
Selcuk Yavuz
Tarih:16.08.2007
Puan:
2,71
(Oy Kullanan:
7
)
Okuma Sayısı:
308
Makaleyi İşaretle
Makale Özeti
Dinamik SQL sorgularının kullanıldığı sistemlerde oluşabilecek bir açıktır.
Makale
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
Makaleyi nasıl buldunuz?
Makaleyi nasıl buldunuz?
Çok Kötü
Çok Yararlı
Görüşleriniz : (opsiyonel)
v2.4
Geri Bildirim (Feedback)
Site içerisinde yazılan tüm makalelerin yazım ve yayınlama hakkı aksi belirtilmediği sürece sadece yazarlara aittir.
Yazgelistir.Com Ekibi - 2006 -
Yazgelistir.com