12 Kasım 2015 2 dk okuma süresi 228 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 ActionResult Form(Blog 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 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.
asp.net mvc validateinput allowhtml xss