在这个XSS和其他黑客时代,我可以看到请求验证的必要性。但这可能有点过头了,这就像切掉你孩子的腿,以确保他不会跑到路上被杀。
我们收到的投诉是,无法设置像<password>
这样的密码。据我所知,解决这个问题的唯一方法是在一大堆页面上设置ValidateRequest="false"
(例如注册、登录、重置密码)。在使用.NET 4.0时,还需要为整个应用程序设置<httpRuntime requestValidationMode="2.0" />
。
这真的是唯一的办法吗?难道没有办法声明只有密码字段不应该被验证吗?
在asp.net 4中,您可以创建自定义的服务器端请求验证器,该验证器可能接受此类非典型请求。写一个很容易,第一个谷歌搜索的例子应该让你开始写自己的:
http://jefferytay.wordpress.com/2010/04/15/creating-your-own-custom-request-validation/
在ASP.Net MVC中,您现在可以使用以下选项来禁用请求验证:
禁用控制器操作的请求验证:
[ValidateInput(false)]
ActionResult SomeAction(string validationIgnored){...}
关于(视图)模型上的属性:
[AllowHtml]
string SomeProperty {get; set;}
或者在已发布的表单字段上使用Request.Unvalidated()
:
var rawField = Request.Unvalidated().Form["field"];