ASP.NET中Page设置ValidateRequest="false" 无效

本文记录了在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

(0)
上一篇 2021年8月21日
下一篇 2021年8月21日

相关推荐

发表回复

登录后才能评论