ValidateInput mu yoksa AllowHtml mi?

12 Kasım 2015 2 dk okuma süresi 100 okunma

ASP.Net MVC action'lara gönderilen parametreleri varsayılan olarak doğrulama filtresinden geçirir. Eğer parametreler içerisinde özel karakterler (html, script vs.) yoksa filtreden geçer, varsa filtreye takılır ve "Potentially dangerous Request.Form was detected from the client ..." hatası alırsınız. İşte bu noktada devreye ValidateInput veya AllowHtml attribute'ları giriyor. Bu iki attribute aynı işi yapıyor gibi görünebilir ve kavram karmaşası yaratabilir. Fakat durum böyle değil. Bu attribute'ları kullanırken dikkatli olmalısınız aksi halde sitenizde xss (cross-site scripting) açığı yaratırsınız. Bu açık ile saldırgan zararlı kod girişi yapabilir ve size/sitenize zarar verebilir.

Blog isimli bir modelimiz (entity) olduğunu varsayalım.

public class Blog
{
    public int Id { get; set; }
    public string Baslik { get; set; }
    public string Ozet { get; set; }
    public string Aciklama { get; set; }
    public DateTime Tarih { get; set; }
}


ValidateInput(false)

[ValidateInput(false)]
public ActionResult Form(Blog model)
{
    return View(model);
}

ValidateInput kullanımı yukarıda görüldüğü gibidir. Html editör kullananların bir çoğu bu attribute'u kullanır. Action seviyesinde gelen parametreler üzerindeki doğrulamayı iptal etmiş ve html/script girişine izin vermiş oluyoruz. Yani ister baslik, ister ozet isterse de aciklama kısmı olsun her türlü karaktere izin vermiş oluyoruz.


AllowHTML

public class Blog
{
    public int Id { get; set; }
    public string Baslik { get; set; }
    public string Ozet { get; set; }
    [AllowHtml]
    public string Aciklama { get; set; }
    public DateTime Tarih { get; set; }
}

AllowHtml kullanımı da yukarıdaki gibidir. Bu attribute ise sadece belirlenen özelliğe html/script girişine izin verildiğini belirtir. Böylece sadece Aciklama kısmına html/script girişi yapılabilir.

Görüldüğü gibi AllowHtml ValidateInput'a göre daha güvenlidir. Fakat bu AllowHtml ile xss açığı olmaz anlamına gelmiyor. Bu nedenle AntiXSS kullanmayı unutmayın. ValidateInput ve AllowHtml arasındaki fark xss'ten tane tane ayırma ile korunmadır. Buna "the granularity of preventing XSS attacks" denir.



Yazılarıma abone olmak ister misiniz?
Spam yapılmaz, sadece bildirim amaçlıdır. İstediğiniz zaman abonelikten çıkabilirsiniz.
İlginizi çekebilecek diğer yazılar.
Form post ile giden tüm dataları loglama

Asp.net Core ile farklı bir class library'den appsettings json dosyasını kolayca okumak

Hatalı bundle kullanımından dolayı alınan MIME type hatası ve çözümü