】“从客户端(ctl00$Content$txtContent)中检测到有潜在危险的 Request.Form 值”之解

“/WebSite”应用程序中的服务器错误。从客户端(ctl00$Content$txtContent="木木木木木木木<br />
")中检测到有潜在危险的 Request.Form 值。说明: 请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止。该值可能指示存在危及应用程序安全的尝试,如跨站点脚本攻击。若要允许页面重写应用程序请求验证设置,请将 httpRuntime 配置节中的 requestValidationMode 特性设置为 requestValidationMode="2.0"。示例: <httpRuntime requestValidationMode="2.0" />。设置此值后,可通过在 Page 指令或 <pages> 配置节中设置 validateRequest="false" 禁用请求验证。但是,在这种情况下,强烈建议应用程序显式检查所有输入。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkId=153133。

异常详细信息: System.Web.HttpRequestValidationException: 从客户端(ctl00$Content$txtContent="木木木木木木木<br />
")中检测到有潜在危险的 Request.Form 值。


解决方法(不推荐)

A potentially dangerous Request.Form value was detected from the client (txtTest="<b>"). 由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危险性值。立马报错。

解决方案一:
在.aspx文件头中加入这句:
<%@ Page validateRequest="false" %>

解决方案二:
修改web.config文件:
<configuration>
<system.web>

<httpRuntime requestValidationMode="2.0" />

<compilation debug="true">
<pages validateRequest="false" />
</system.web>
</configuration>

因为validateRequest默认值为true。只要设为false即可。

来源:[清清月儿]
禁止validateRequest的办法
http://blog.csdn.net/21aspnet/archive/2007/03/20/1535531.aspx

解决方法(推荐)

为什么很多程序员想要禁止 validateRequest 呢?有一部分是真的需要用户输入"<>"之类的字符。这就不必说了。还有一部分其实并不是用户允许输入那些容易引起XSS的字符,而是讨厌这种报错的形式,毕竟一大段英文加上一个ASP.Net典型异常错误信息,显得这个站点出错了,而不是用户输入了非法的字符,可是自己又不知道怎么不让它报错,自己来处理报错。

对于希望很好的处理这个错误信息,而不使用默认ASP.Net异常报错信息的程序员们,你们不要禁用validateRequest=false。

正确的做法是在你当前页面添加Page_Error()函数,来捕获所有页面处理过程中发生的而没有处理的异常。然后给用户一个合法的报错信息。如果当前页面没有Page_Error(),这个异常将会送到Global.asax的Application_Error()来处理,你也可以在那里写通用的异常报错处理函数。如果两个地方都没有写异常处理函数,才会显示这个默认的报错页面呢。

举例而言,处理这个异常其实只需要很简短的一小段代码就够了。在页面的Code-behind页面中加入这么一段代码:

protected void Page_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex is HttpRequestValidationException)
{
Response.Write("<script language=javascript>alert('字符串含有非法字符!')</script>");
Server.ClearError(); // 如果不ClearError()这个异常会继续传到Application_Error()
Response.Write("<script language=javascript>window.location.href='default.aspx';</script>");
}
}

这样这个程序就可以截获 HttpRequestValidationException 异常,而且可以按照程序员的意愿返回一个合理的报错信息。

这段代码很简单,所以我希望所有不是真的要允许用户输入<xxx>之类字符的朋友,千万不要随意的禁止这个安全特性,如果只是需要异常处理,那么请用类似于上面的代码来处理即可。

而对于那些通过明确禁止了这个特性的程序员,自己一定要明白自己在做什么,而且一定要自己手动的检查必须过滤的字符串,否则你的站点很容易引发跨站脚本攻击。


猜你喜欢

转载自jeelee.iteye.com/blog/2341588