当前位置:首页 > ASP.NET MVC

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

发表于 2015-11-01 18:21

经常我们需要从客户端传一些HTML片段到后端,比如:博客发布一篇文章、发布留言等。

但是你可能会遇到错误,类似下图:从客户端中检测到有潜在危险的 Request.Form 值 图1

1. 其实错误中已经说明的很清楚了,并且告诉了解决方法:

从客户端(txtUEditor="<p>a</p>")中检测到有潜在危险的 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: 从客户端(txtUEditor="<p>a</p>")中检测到有潜在危险的 Request.Form 值。

2. 另一种方法是在web.config中的pages节中设置,如:

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

但是这种方式并不好,太过暴力,因为它会使整个项目所有的页面都不会再验证提交的内容,安全性大大降低。

3. 推荐做法:

给Action加一个Attribute:[ValidateInput(false)],这样只会让该页面不验证提交的内容,而不会影响到其他页面。

[HttpPost]
[ValidateInput(false)]
public ActionResult Publish(FormCollection form)
{
    return View();
}

我使用的是.Net 4.0、MVC 4。



本文章由创风网原创,转载请注明出处:http://www.windite.com/article/details/qh24v42