Ayende @ Rahien

My name is Oren Eini
Founder of Hibernating Rhinos LTD and RavenDB.
You can reach me by phone or email:


+972 52-548-6969

, @ Q c

Posts: 6,026 | Comments: 44,842

filter by tags archive



This is pretty common error(?) you get when you try to POST any data with ASP.NET MVC via Ajax. Pretty easy to fix with [ValidateInput(false)]...Its annoying as hell because if you have a say a "home" page with many partials from many controllers, you need to add to EVERY controller...blargh!


err, any POST data with HTML or HTML-like characters.


A handy trick if you want to pass html-like characters in a field without disabling validation outright is to put two underscores in front of the fields name which will let that field through, ie: name=" __html"

Dmitriy Nagirnyak

@Jeff, you can inherit from BaseController and set its "ValidateRequest = false" in its constructor (or wherever) only once.

I never liked the attributes :)


One of many reasons I really don't like the ASP.NET stack more and more, its so general purpose and if anything aimed at the casual developers its sickening that in order to get it close to what you want you have to go and do more work (often runtime work) to turn OFF all the useless crap thats turned on by default..

This is why I don't think conventions are great in library code, just WHO are you targeting and why not just have sample code/templates to define conventions.

Conventions should exist in the 'implementation' (the app) not its frameworks, if you DO put a convention in your framework then you best seriously think about how you design it for pluggability.


for security purposes this is worthless as there are many known ways around this protection. you just have to encode the characters differently. if anyone wants to hack your site he still can do it with standard techniques. only people not wanting to hack the site are suffering.

a better solution would have been to make the <%= %> syntax html-encode by default which anyway is what you want most of the time.


this blog has removed my html: < % = % >. thats exactly as wrong as asp.net filtering. why not just encode html chars and allow them? this is guaranteed to be safe while filtering is not and provides a less good user experience.


just one more thing: this is not safe by default, because there are easy ways around it. html-encoding all user input by default would be safe by default. oh you just cannot let people make security descisions. they get it wrong all the time. it is like the windows lan manager storing hashed passwords in two halfes instead of one whole. anyone who does not understand the problem with that should not design an authentication system at all.


That annoys the hell out of me. Ironically our production app has an issue with this exception, even though we've turned it off at the web.config level and in our BaseController. It occurs about once a week and we can't locate the data that is causing it.


@Dmtriy - doh, so obvious! Thanks!


Chris: Cant you just log the error and fix it :-)?

Anyways, you just need a [ValidateInput(false)] on the action, asp.net mvc doesnt seem to care about the setting in web.config.


@Duckie: Our app is on the large size. We have about 60 controllers with over 600 actions. I'd rather have something in the controller infrastructure than decorating everything with that.

Comment preview

Comments have been closed on this topic.


No future posts left, oh my!


  1. Technical observations from my wife (3):
    13 Nov 2015 - Production issues
  2. Production postmortem (13):
    13 Nov 2015 - The case of the “it is slow on that machine (only)”
  3. Speaking (5):
    09 Nov 2015 - Community talk in Kiev, Ukraine–What does it take to be a good developer
  4. Find the bug (5):
    11 Sep 2015 - The concurrent memory buster
  5. Buffer allocation strategies (3):
    09 Sep 2015 - Bad usage patterns
View all series


Main feed Feed Stats
Comments feed   Comments Feed Stats