本文记录了在ASP.NET项目中,设置了Page属性ValidateRequest="false"但是无效的解决方法,并且说明了造成HTTP请求验证设置无效的原因。
ValidateRequest请求验证设置没有效果的原因
出现此问题一般是由于ASP.NET项目使用的.Net Framework版本是4.0以上的版本,4.0版本的验证模式和之前3.5、3.0和2.0的不一样,是全局验证,即所有的HTTP请求都会触发请求验证,防止遭到恶意的攻击。而且4.0默认的验证模式比页面Page元素和配置文件的优先级还要高,所以在在页面中设置ValidateRequest属性就不会起到作用。
PS: .Net Framework 4.0以上的requestValidationMode都是4.0,反之以下的都是2.0,目前只有这两种模式。
解决配置文件和Page元素设置验证请求不起作用的步骤
根据上面的问题原因,只要在web.config配置文件中将项目的验证模式设置成2.0即可,具体代码如下:
<system.web>
<httpRuntime requestValidationMode="2.0"/>
</stytem.web>
另外要注意的是,在ASP.NET MVC中ValidateInput(false)属性设置无效也是这个原因!
其他相关资料
更多详情可以参考这两篇文章:
- 解决ASP.NET“从客户端***中检测到有潜在危险的 Request.Form值。”错误
- 微软MSDN的资料:HttpRuntimeSection.RequestValidationMode 属性
这里顺便截取MSDN上关于配置文件requestValidationMode的部分说明:
4.0(默认)。 HttpRequest 对象在内部设置一个标志,该标志指示每当访问 HTTP 请求数据时应触发请求验证。 这可保证在请求期间访问数据(如 cookie 和 URL)之前触发请求验证。 配置文件中页元素(如果有的话)的请求验证设置或单独页面中的 @ 页指令的请求验证设置将被忽略。
•2.0. 仅对网页(而不是对所有 HTTP 请求)启用请求验证。 此外,配置文件中的 pages 元素(如果有的话)的请求验证设置或单独页中的 @ Page 指令的请求验证设置用来确定要验证哪些页请求。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/98390.html