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
Etiketler
Son Yazılar
- Cep telefonu kullanıcılarını mobil siteye nasıl yönlendirilir?
- require vs require_once
- IFrame ‘in yüksekliğini içeriğe göre ayarlamak
- Bmp uzantılı resim dosyasını jpg veya png olarak kaydetmek
- Php Resim Boyutlandırmasında Memory Limit sorunu
Son Yorumlar
- Php’ de Ajax yardımıyla dosya yükleme (File Upload) için chat
- Asp.Net’de Ajax kullanılarak CAPTCHA için Enes Pekkaya
- Asp.Net’de Ajax kullanılarak CAPTCHA için Cenk
- JQuery Form Kontrol için Sedat Kumcu
- Garanti Sanal Pos Kurulumu, Sorunlar ve Çözümler için Enes Pekkaya
Haftanın Özlü Sözü
Bağlantılar
- Hayata Tat Kat
- Innova Bilişim Çözümleri
- Onur Değerli
- Pleksus Bilişim Teknolojileri
- Sinan Gül
- Taner Günal
- Toppik – Minoxil
Arşivler
- Mart 2012
- Şubat 2012
- Ocak 2012
- Aralık 2011
- Kasım 2011
- Ekim 2011
- Eylül 2011
- Temmuz 2011
- Haziran 2011
- Mayıs 2011
- Mart 2011
- Ocak 2011
- Aralık 2010
- Kasım 2010
- Ekim 2010
- Eylül 2010
- Ağustos 2010
- Temmuz 2010
- Haziran 2010
- Mayıs 2010
- Nisan 2010
- Mart 2010
- Şubat 2010
- Ocak 2010
- Haziran 2009
- Mayıs 2009
- Nisan 2009
- Mart 2009

