framework4.0设置validateRequest false无效

  当asp.net程序运行在framework4.0下时,即使设置了web.config

  <system.web>
    <pages validateRequest="false">

  当提交了包含<>这种html标签时还是会出现 “验证错误”, 从客户端(content="<p align="justify">...")中检测到有潜在危险的 Request.Form 值,ASP.NET 4.0.30319.0。

  按照访问策略,这将导致一些安全问题,如:跨站脚本攻击(cross-site scripting attack)。而这个问题的更准确描述则是,当 你在安装了.NET Framework 4.0以上版本后,当你的应用程序以.NET Framework 4.0为框架版本,你的任意服务器请求,都将被进行服务器请求验证(ValidationRequest),这不仅包括ASP.NET,同时也包括Web Services等各种HTTP请求,不仅仅针对aspx页面,也针对HTTP Handler,HTTP Module等,因为这个验证(Valify)的过程,将会发生在BeginRequest事件之前。

  基于以上原理,在ASP.NET之前的版本中,请求验证也是默认开通的,但是发生在页面级(aspx)的,并且只在请求执行的时候生效,因此,在旧的版本中,我们只需要按以下方式配置即可:

  在页面级别(aspx中)设置

<%@page language="C#"  ValidateRequest="false"%>

或者
  在全局级别(Web.config中)设置

<configuration>
    <system.web>
        <pages validateRequest="false">

  但是,以上设置仅对ASP.NET4.0以下有效。在ASP.NET4.0版本上,我们需要更多一行的配置:

  在全局级别(Web.config中)设置

<configuration>
    <system.web>
        <httpRuntime requestValidationMode="2.0">

  这 一点其实在发生错误的页面中已经有说明了。在实际使用过程中,不仅如此,而且我发现requestValidationMode只要设置成小于4.0就可 以,比如:1.0,2.0,3.0,3.9都是可以的,错误提示中指明用2.0,目的只是说明用ASP.NET 2.0的默认方式进行工作。

来源:http://www.cnblogs.com/vingi/articles/2478134.html

评论(0)网络
阅读(396)喜欢(0)不喜欢(0)Asp.Net/C#