Mar
18

Asp.Net’ de Güvenlik Bölüm – 1

Bu konu başlı başına derya denizdir. Bir çok kişi bu konuya kafa yormuşlardır. Acaba bu güvenlikde daha nasıl aşılmaz yollar bulabiliriz diye? Bu soru hala geçerliliğini korumaktadır. Öyleki hala çok güvenlikli denilen (!) sitelerde bile bilgi hırsızlığı yapılmaktadır. Örnek vermem gerekirse, internet bankacılığı ile birçok kişinin hesabından para aktarımı ile milyar dolarlar çalınmıştır ve şu an bile bir kaç kişinin hesabı boşaltılıyor olabilir. Dikkat ederseniz bu tek örneğimizdi, örnek sayımızı çok daha fazla artırabiliriz (kişisel bilgi , mail şifresi  vs). Hal böyle olunca bu konunun önemi daha fazla artmaktadır.

Burada size temel olarak nelere dikkat etmeniz gerektiğini ve örnek kodlarla neler yapacağınızı anlatmak istiyorum. Asp.Net yazılımcıları için bu yazımın faydalı olacağını düşünmekteyim.

GET ve POST Metoduyla Gelen Parametrelerin Kontrolü :

Bu olay hacklemede en çok kullanılan yöntemlerden biridir. İsterseniz bir örnek vererek açıklamaya çalışalım ;

http://www.siteadi.com/Default.aspx?newsId=46

yukarıdaki adrese dikkat edersek eğer, “newsId” adlı parametreye “46” değeri verilmiş ve bizim için  veritabanına bağlanıp ilgili verileri getirmektedir. Kötü niyetli kişinin ilk yapacağı işlerden birisi burada bir kaç değişikliğe gitmek. “newsId=46” değilde “newsId=deneme'” yazdığında eğer herhangi bir kontrol yapılmıyorsa kullanıcının karşına hata mesajı gelecektir ve büyük ihtimallede tablonun ismi vs yazacaktır 🙂 Bu sayede kullanıcı bazı bilgileri edinmiş olur. Peki şöyle yazmış olsaydık : “newsId=’;DROP TABLE tabloadı” eğer “tek tırnak”  kontrolü olmasaydı yukarıdaki kod yardımıyla daha önceden tablo adını bildikten sonra ilgili tabloyu istediği gibi silebilir.

Yukarıdaki örneği herzamankisi gibi çoğaltabiliriz. En basit haliyle  e-posta, veya şifrenizi bu yolla öğrenebilirler.

Gelelim bu gibi durumlardan korunma yollarına… Biz herzaman kullanıcının değiştirebildiği heryeri (değer girebildiği inputlar, url paramtersi vs) kontrol etmemiz gerekmektedir. Yoksa sonumuz pek hayırlı olmayabilir 🙂 Bu gibi saldırılara karşı yazdığım ufak bir class dosyası mevcut (Verify.cs). Class’a ait fonksiyonları açıklamak gerekirse ;

  • lengthControl(string word, int length) : Bu fonksiyon ile girilen değerin uzunluğunun uyup uymadığını göstermektedir. Bize boolean değer döndermektedir.
  • isNumeric(string word) : Gönderilen değerin sayı olup olmadığını kontrol etmektedir. Bize boolean değer döndermektedir.
  • isValidDate(string date) : Gönderilen değerin geçerli tarih olup olmadığını kontrol etmektedir. Bize boolean değer döndermektedir.
  • neutralizeQuote(string word) : değerin içinde şayet tek tırnak (‘) var ise bunları etkisiz hale getirmektedir. Bize string değer döndermektedir.

Bu kontrollerin dışında bir başka olayıda kontrol etmemiz gerekmektedir. Eğer biz kullanıcılara dosya yükleme (FileUpload)’ ye izin veriyorsak, kullanıcının bize göndermiş olduğu dosyanın uzantısınıda kontrol etmemiz gerekmektedir. Bu durumun oluşturacağı en büyük sorun ise, kullanıcı eğer isterse dosya yöneticisi (file manager)  işini gören bir yazılımla bütün kaynak kodlarınızı alabilir hatta ana sayfanıza index basıp (Hacked By …) diye yazılarla karşılaşabilirsiniz 🙂 Bu durumu önlemek için size kısa bir kod parçacığı vermek istiyorum;


if (this.FileUpload.HasFile)
{
String extension = System.IO.Path.GetExtension(this.FileUpload.PostedFile.FileName);
if (System.Text.RegularExpressions.Regex.IsMatch(extension, ".jpg|.jpeg|.pjpeg|.gif|.png|.bmp"))
{
// Yükleme işleminin yapılacağı yer
}
else
{
this.Lerror.Text = " Lütfen resim dosyası yükleyiniz (Örn. Uzantı : .jpg, .jpeg, .pjpeg, .gif, .png, .bmp) ";
return false;
}
}

Yukarıdaki kodu açıklamak gerekirse,  ilgili sayfamda “FileUpload” adında fileupload bileşenim mevcut. “extension” adında değişkenim var. Ben buna yüklenecek olan dosyanın uzantısını ekliyorum ve “Regex” yardımı ile uzantıları kontrol ettiriyorum.

Bu şekilde kullanıcının yüklemek istediği doyayı kontrol ettikten sonra sunucuma yüklemesine izin veriyorum…

Yazmış olduğum Verify.cs adlı classımı indirmek için tıklayın.

Asp.Net’ de Güvenlik başlıklı yazımın ilk bölümünü bitirmiş durumundayım. İlerleyen zamanlarda site  güvenliği ile ilgili yazılarıma devam edeceğim…

Yorum Yapın

 

Twitter'dan Takip Et! Twitter'dan Takip Et!

Etiketler

Son Yazılar

Son Yorumlar

Bağlantılar

Arşivler