从客户端检测到有潜在危险的Request.Form值
从客户端检测到有潜在危险的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。