Vereceğim örneği sistemimiz üzerindeki giriş sayfalarında yaptığımız olayın mantığından bahsederek açıklayayım.

Giriş sayfalarındaki en basit mantık 2 adet textbox girişi (genellikle birisi kullanıcıadıdiğeri de şifre için kullanılır), 1 tane de sayfanın post edilmesi için bir butondur. Kodlama mantığıise; textbox’lara girilen değerlerin buton’a basıldıktan sonra dinamik bir Sql sorgusu ve herhangi bir veri okuma yöntemiyle {genellikle bu iş için DataReader -MSSQL için SqlDataReader daha uygundur- kullanılır } kullandığımız veritabanıüzerindeki verilerle eşleştirilip sistemde sadece kullanıcıların görebileceği alana geçiş yapılır. Buraya kadar her şey mantığa uygun ve sorun yok. Veritabanında kayıtlıolan kullanıcıbu şekilde giriş yapabiliyor. Peki ya bu durumun istismarısöz konusu olursa o zaman ne yapacağız? İlk önce bu sorunun cevabıiçin bu durumun nasıl istismar edilebileceğini açıklamak gerekir. Bunu örnek vererek açıklayayım.

Varsayımlarımızdan bahsetmek gerekirse;

1- KullanıcıAdıgirişimizin yapıldığıtextbox’ın id değeri txtKullaniciAdi,

2- şifre girişimizin yapıldığıtextbox’ın id değeri txtSifre,

3- Veritabanımızın adıturkbt,

4- Veritabanımızda kullanıcılarınızın verilerinin saklandığıtablo adıuyeler

5- Veritabanımızda uyeler adlıtablo içerisinde kullanıcıisimlerinin saklandığıkolon adıkullanici_adi

6- Veritabanımızda uyeler adlıtablo içerisinde kullanıcışifrelerinin saklandığıkolon adısifre

7- Dinamik Sql sorgumuzun “Select * from uyeler where kullanici_adi = ’” + txtKullaniciAdi.Text + “’ and sifre = ’” + txtSifre.Text + “’ ” şeklinde olduğunu varsayalım.

şimdi de yukarıdaki varsayımlara uygun bir sistemde bu durumun nasıl istismar edildiğine geçelim.

Buraya kadar düzgün bir şekilde işleyen sistemimize ufak bir deneme yapalım. KullanıcıAdıgirişine aşağıda belirttiğim ifadeyi girelim bakalım ne olacak ?

’or 1=1–

Bu şekilde bir giriş yaptığımızda doğacak sonuçlarıaçıklayalım.

KullanıcıAdıalanına bu giriş yapıldığıtaktirde dinamik olarak kullandığımız Sql sorgumuz şu şekli alacaktır.

“Select * from uyeler where kullanici_adi = ’’or 1=1–’ and sifre = ’” + txtSifre.Text + “’ “

Sorgumuz bu hale geldikten sonra bir sifre yazmaya gerek kalmadan sisteme giriş yapılabilir.

Aslında sorgumuzun çalışan kısmıyukarıda belirttiğim kadar bile değil.

Sorgumuz “Select * from uyeler where kullanici_adi = ’’or 1=1–’ şeklini alıyor. Neden diye soranlar için açıklayayım.

’or 1=1– ifadesinin sonunda bulunan — işaretleri, buradan sonra gelen sorguyu yok saymak anlamına geliyor.

Peki neden ’or 1=1– yazdık? Burada verimiz “veya 1=1 eşitliğini sağla” anlamına geliyor. Bu da bizim oraya girdiğimiz değerin hatasız çalışmasınısağlayacaktır.

Bundan nasıl korunuruz?

İlk yapmamız gereken textbox’lara girilen değerlerin kontrolünü yapmak olacaktır. Girilen değerler sadece bizim izin verdiğimiz değerler olmalıdır. Aslında bu iş için aklımda çok farklıbir yöntem daha var fakat yoğunluktan dolayıüzerinde çalışma fırsatıbulamadım. Eğer işe yararsa aklımdaki yöntemi de en kısa zamanda sizlere açıklayacağım. Giriş yapılacak alanların değerlerini dinamik bir şekilde vermekle ilgili bir şeyler düşündüm ama ne derece etkili olacağıhakkında şu an için bir fikrim yok.

Textbox’lara girilen değerleri nasıl kontrol edeceğiz?

Tabii ki RegularExpressionValidator nesnesi ile yapacağız bu işlemi. RegularExpressionValidator nesnesi üzerinde yapmamız gereken tek şey ValidationExpression özelliğine girişine izin vereceğimiz karakter aralıklarınıbelirtmektir. Örnek vermek gerekirse bu özelliğe atadığımız değerler “^([a-z]|[A-Z]|[0-9]){3,15}$” şeklinde olduğunda textbox’a girilen değerler a-z, A-Z, 0-9 aralığındaki değerler olacaktır.Atanan değerde belirttiğim {3,15} ise textbox’a girilen karakter sayısıile ilgilidir.Özelliğini bu şekilde atadığımız textbox’a 4 karakterden küçük, 15 karakterden büyük değer giremeyiz.Girdiğimiz taktirde ErrorMessage özelliğine atayacağımız değer ekrana yansıyacaktır ve post işlemi yapılmayacaktır.

Bu yazımın sonuna gelmiş bulunmaktayım. Güvenlik yazılarım seri halinde devam edecektir. Sadece bu yazımdakiler güvenliğimiz için tek başına yeterli olmayacaktır. Bunun yanında yapmanız gerekenleri de diğer yazılarımda anlatacağım. Mesela bu yazıda dinamik Sql cümleleri yerine stored procedure kullanmayıanlatmadım yada ConnectionString güvenliğini anlatmadım. şimdilik bu kadar. Bunlarıözümsedikten sonra diğer yazılarımıokumanızıtavsiye ederim. Her şey sırasıyla olursa istediğiniz bilgiyi daha kesin bir şekilde öğrenebilirsiniz.

Powered by

Tags: Convert, sql.injection

Benzer Yazılar

Keywords: ASP.NET ile SQL Enjeksiyondan korunmak… , ASP.NET ile SQL Enjeksiyondan korunmak… şarkıları, ASP.NET ile SQL Enjeksiyondan korunmak… indir, ASP.NET ile SQL Enjeksiyondan korunmak… mtv.com.tr, ASP.NET ile SQL Enjeksiyondan korunmak… konfigirasyon, ASP.NET ile SQL Enjeksiyondan korunmak… , ASP.NET ile SQL Enjeksiyondan korunmak… bedava, ASP.NET ile SQL Enjeksiyondan korunmak… izlesene.com., ASP.NET ile SQL Enjeksiyondan korunmak… mp3 indir, ASP.NET ile SQL Enjeksiyondan korunmak… youtube, ASP.NET ile SQL Enjeksiyondan korunmak… klip izle, ASP.NET ile SQL Enjeksiyondan korunmak… izle, ASP.NET ile SQL Enjeksiyondan korunmak… yükle, ASP.NET ile SQL Enjeksiyondan korunmak… rapidshare.com, ASP.NET ile SQL Enjeksiyondan korunmak… şarkı sözleri, ASP.NET ile SQL Enjeksiyondan korunmak… dinle,antivirüs