ASP.NET MVC Eğitimi – 07 (MVC ile XSS Zafiyeti Önleme)

Bu yazımızda MVC ile XSS Zaafiyeti Önleme konusuna değineceğiz. Bu önlemi MVC aslında alıyor ama farklı ihtiyaçlara göre kendi kendimize açıklıklar oluşturmamız mümkün. Burada nasıl daha güvenli kalırız kısmına bakacağız.

XSS Nedir?

Siteler Arası Betik Çalıştırma diye adlandırdığımız XSS ingilizce olarak Cross Site Scripting olarak geçmektedir. Bir güvenlik zafiyeti adıdır. OWASP (Open Web Application Security Project) tarafından oluşturulan Top 10 zafiyet listesinde hemen hemen her zaman yerini almıştır. Bu zafiyet türüyle saldırgan veritabanında yapılacak veri girişi ve güncelleme işlemlerinde araya girerek zararlı kodları veritabanına kaydetmeye çalışır. Bunu başarırsa web sitenize veya uygulamanıza tam erişim sağlayabilir.

MVC’de XSS Önleme

Dediğimiz gibi MVC teknolojisi aslında bunun için önlemlerini halihazırda almış durumda. Fakat HTML tabanlı nesnelerin kullanımında (örneğin HTML Editör) bu kısıtlamayı aşağıdaki gibi kaldırmamız gerekiyor.

[ValidateInput(false)]
public ActionResult NesneKaydet(Nesne obj)
{
    return View(obj);
}

[ValidateInput(false)] satırı ile NesneKaydet olayımızı XSS saldırılarına açık hale getirmiş olduk. Bunu aslında mecburen yaptık. Bunu yapmadığımız zaman HTML editör kullanarak veritabanımıza html etiketlerini veya javascript kodlarını ekleyemeyiz. Peki şimdi ne yapacağız.

Alternatif Çözüm
public class Nesne
{
    public int NesneID{ get; set; }
    public string NesneAdi { get; set; }
    [AllowHtml]
    public string NesneDetay { get; set; }
}

Bir önceki örnekte kocaman bir güvenlik açığı oluşturmuş olduk. Fakat yukarıdaki kod parçacığında sadece NesneDetay isimli alanıma bununla ilgili izin vererek bir bakıma saldırganın işini zorlaştırmış oldum. Tam manasıyla kendimi güven altına aldım diyemeyiz. Ama en azından en az açıklıkla ihtiyacımızı gidermiş olduk. Aksi takdirde içinde HTML etiketleri veya javascript kod parçacıkları içeren herhangi bir metni alıp veritabanımıza kaydedemezdik.

Anlatacaklarım bu kadar. Güvende kalın.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir