如何绕过单个字段的请求验证



在这个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"];

最新更新