Ayende @ Rahien

Refunds available at head office

Safe by default is also annoying by default

This was the cause of a NH Prof not being able to report some errors home.

image

I follow the logic, I agree with the logic, but I still goes ARGH!!!

Comments

Jeff
09/17/2009 04:30 AM by
Jeff

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!

Jeff
09/17/2009 05:48 AM by
Jeff

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

Robert
09/17/2009 07:11 AM by
Robert

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
09/17/2009 07:29 AM by
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 :)

Stephen
09/17/2009 09:10 AM by
Stephen

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.

tobi
09/17/2009 10:35 AM by
tobi

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.

tobi
09/17/2009 10:36 AM by
tobi

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.

tobi
09/17/2009 10:44 AM by
tobi

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.

Chris
09/17/2009 10:52 AM by
Chris

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.

Jeff
09/17/2009 08:46 PM by
Jeff

@Dmtriy - doh, so obvious! Thanks!

Duckie
09/18/2009 01:04 PM by
Duckie

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.

Chris
09/18/2009 09:18 PM by
Chris

@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.

Comments have been closed on this topic.