ValidateInput mu yoksa AllowHtml mi?

12 Kasım 2015 2 dk okuma süresi 43 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.
VS2015'in 3. update'ini yaptıktan sonra asp.net core web uygulaması yaratmak istediğimde şu şekilde bir hata ile karşılaştım. "Exception : The system cannot find the file specified. (Exception from HRESULT: 0x80070002)". Çözümü oldukça basit.

Entity framework code first kullanıyorsanız ve inheritance yapıp yeni bir class yarattığınızda bunun gibi bir hata alırsınız. Bunun nedeni fluent api'nin inheritance yapılan class ile ana class'ın map yapmaya çalışması ve ilgili kolonu veritabanında bulamamasıdır. Çözümü ise inherit olmuş class'a [NotMapped] DataAnnotations attribute'unu eklemek.

Asp.Net Mvc ile recursive nasıl yazılır, @helper veya HtmlHelper kullanarak recursive fonksiyon yazmak, Asp.Net MVC View recursive fonksiyon nasıl yazılır?