您的位置:首页 > 编程学习 > ASP.NET

从客户端检测到有潜在危险的Request.Form值

更多 2014/5/6 来源:ASP.NET学习浏览量:1490
学习标签: Request.Form Web
本文导读:由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危险性值。立马报错。所以在页面中加入富文本编辑框时,在提交信息的时候会报如下的错误: 从客户端中检测到有潜在危险Request.Form 值。下面介绍其解决方法

解决方案一:
 

在.aspx文件头中加入这句:

<%@ Page validateRequest="false" %>

 


解决方案二:


修改web.config文件:

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


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

 

解决方案三:


当然,这样只能是让界面好看一些,要想抵制注入,还得从过滤上做足功夫。


然后,还是有不禁用validateRequest的方法的


正确的做法是在你当前页面添加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("请您输入合法字符串。");

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

}

}

 

解决方案四:

 

在Global.asax文件的Application_Error()来处理。这样在整个网站中都生效。

 

void Application_Error(object sender, EventArgs e)

{

// 在出现未处理的错误时运行的代码

Exception ex = Server.GetLastError();

if (ex is HttpRequestValidationException)

{

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

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

}

}

 

五、MVC中解决方案:

 

1.在页面aspx中

<%@ Page ValidateRequest="false" >



2.在controller中action添加

[ValidateInput(false)]
public ActionResult Edit()

{

this.ValidateRequest = false;

retrun View();

}



3.在网站web.config

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

</system.web>


原因是:在.net 4.0 环境下请求验证范围扩大到所有请求。从BeginRequest阶段就开始HttpRequest,不仅仅是页面文件(.aspx),还包含webservice以及http Handlers。
 

 

收藏
219
很赞
391
您可能感兴趣