错误:

“/”应用程序中的服务器错误。


从客户端(TextBox4="<html><head><meta ht...")中检测到有潜在危险的 Request.Form 值。

说明: 请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止。该值可能指示危及应用程序安全的尝试,如跨站点的脚本攻击。通过在 Page 指令或 配置节中设置 validateRequest=false 可以禁用请求验证。但是,在这种情况下,强烈建议应用程序显式检查所有输入。

异常详细信息: System.Web.HttpRequestValidationException: 从客户端(TextBox4="<html><head><meta ht...")中检测到有潜在危险的 Request.Form 值。

解答:

 

在页面源文件顶部加入ValidateRequest="false"

     如:<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="xmlddl.aspx.cs" Inherits="test2.xmlddl" ValidateRequest="false"%>

大部分人给出的解决方案竟然是在ASP.Net页面描述中通过设置 validateRequest=false 来禁用这个特性,而不去关心那个程序员的网站是否真的不需要这个特性。对于希望很好的处理这个错误信息,而不使用默认ASP.Net异常报错信息的程序员们,你们不要禁用validateRequest=false

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

protected void Page_Error(object sender, EventArgs e)

        {

            Exception ex = Server.GetLastError();

            if (ex is HttpRequestValidationException)

            {

                Response.Write("请您输入合法字符串。");

                Server.ClearError(); // 如果不ClearError()这个异常会继续传到Application_Error()

            }

        }

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

posted on 2008-10-14 11:00  啊呆  阅读(426)  评论(2编辑  收藏  举报