终极解决方案:ASP.NET MVC5(Razor)从客户端中检测到有潜在危险的 Request.Form 值

终极解决方案:ASP.NET MVC5(Razor)从客户端中检测到有潜在危险的 Request.Form 值

6123发表于2016-05-01

 

文章编辑出现了问题:

ASP.NET mvc5(razor)从客户端中检测到有潜在危险的 Request.Form 值

从客户端(NewContent="<p>
2016-04-14至201...")中检测到有潜在危险的 Request.Form 值。

说明: ASP.NET 在请求中检测到包含潜在危险的数据,因为它可能包括 HTML 标记或脚本。该数据可能表示存在危及应用程序安全的尝试,如跨站点脚本攻击。如果此类型的输入适用于您的应用程序,则可包括明确允许的网页中的代码。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=212874。 
异常详细信息: System.Web.HttpRequestValidationException: 从客户端(NewContent="<p>
2016-04-14至201...")中检测到有潜在危险的 Request.Form 值。
源错误: 
行 146:        public ActionResult Edit(MNews model)
行 147:        { 
行 148:            
var urlReferrer = Request.Params["UrlReferrer"]; 行 149:            
ViewBag.UrlReferrer = urlReferrer;
行 150:            
var js = new JsonResultMessage();



字段NewContent的值HTML代码含有HTML 标记或脚本。该数据可能表示存在危及应用程序安全的尝试,如跨站点脚本攻击。

即使在Action中加了 [ValidateInput(false)]也不管用,原来是下面代码了引起的:

var urlReferrer = Request.Params["UrlReferrer"];
ViewBag.UrlReferrer = urlReferrer;

把上面两行代码注释掉是,就正常了。原来在MVC中使用了 Request.Params来获取参数值验证时对加 [ValidateInput(false)]是还够的,还要在配置文件Web.config中的结点httpRuntime加入requestValidationMode="2.0",如下图:

如是代码中没有Request.Params来获取参数值,只在Action方法加上 [ValidateInput(false)]就可以了。

小编蓝狐