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
- Uzak sunucuda bulunan android cihaz ile otomasyon
- Mac’ de çoklu Java versiyon yönetimi
- İş yarar docker komutları
- Eski branchlerin git’ den silinmesi
- Kubernetes Süresi Dolmuş Sertifikaları Yenilemek
Son Yorumlar
- Hosting koşuşturması için
- Garanti Sanal Pos Kurulumu, Sorunlar ve Çözümler için
- Visual Studio Toolbox’a component(bileşen) eklenmesi için
- “File is too large for destination file system” hatasını gidermek için
- Php’de UTF-8 Türkçe karakter sorunu ve çözümü için
Bağlantılar
Arşivler
- Kasım 2021
- Eylül 2021
- Ağustos 2021
- Temmuz 2021
- Aralık 2020
- Kasım 2020
- Ekim 2020
- Eylül 2020
- Kasım 2017
- Mayıs 2017
- Mart 2017
- Şubat 2017
- Ocak 2017
- Nisan 2015
- Aralık 2014
- Mayıs 2014
- Eylül 2013
- Haziran 2013
- Şubat 2013
- Kasım 2012
- Ekim 2012
- Eylül 2012
- 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