欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

MVC中提示错误:从客户端中检测到有潜在危险的 Request.Form 值的详细解决方法

创建时间:2011年10月24日 16:51  阅读次数:(17045)
分享到:
今天往MVC中加入了一个富文本编辑框,在提交信息的时候报了如下的错误:
从客户端(Content="<EM ><STRONG ><U >这是测试这...")中检测到有潜在危险的Request.Form 值。

说明: 请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止。该值可能指示存在危及应用程序安全的尝试,如跨站点脚本攻击。若要允许页面重写应用程序请求验证设置,请将 httpRuntime 配置节中的 requestValidationMode 特性设置为requestValidationMode="2.0"。示例: <httpRuntime requestValidationMode="2.0" / >。设置此值后,可通过在 Page 指令或 <pages > 配置节中设置 validateRequest="false" 禁用请求验证。但是,在这种情况下,强烈建议应用程序显式检查所有输入。有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkId=153133。 

原以为就像普通的Asp.net页面一样,在头部的Page中加入ValidateRequest="false"就行了,谁知问题还是存在。弄了一个上午,问题终于解决,将解决方法汇总如下:

1,在出现该错误的页面头部的page中加入ValidateRequest="false",那么该页面的任何一次Post提交都不会再验证提交内容的安全性。
如:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Manage/ViewMasterPageEdit.Master"     Inherits="System.Web.Mvc.ViewPage<MvcWebPhoto.Models.Entities.Article >" 
ValidateRequest="false" % >

2,在web.config中的pages节中配置validateRequest="false",如:
<system.web >
<pages validateRequest="false" ></pages > 
</system.web >

但这样,整个项目中的所有Form请求都不再验证提交内容的安全性,极不提倡这种做法。

关于该问题的安全的解决方案可以参看本站:
从客户端中检测到有潜在危险的Request.Form值的详细解决方案

3,如果你使用的是.Net 3.5,MVC 2.0及更高的版本,那么可以在处理Post方法的Action添加一个特性:[ValidateInput(false)],这样处理就更加有针对性,提高页面的安全性。
如:
[HttpPost]
[ValidateInput(false)]
public ActionResult CatalogEdit(Catalog model)
{
return View();
}

重要
如果你使用的是MVC 3.0,那么你会发现做了以上的设置后还是无效。这是因为你还需要在web.config中做以下设置:
<system.web >
<httpRuntime requestValidationMode="2.0" / >
</system.web >

(唉~ 非常非常的麻烦啊)

注意:在MVC项目中,Views文件夹下与主项目下,都会有一个web.config文件。Views下的web.config文件只对Views文件夹下面的文件有效。如果你要处理的页面不在Views下面,那么<httpRuntime requestValidationMode="2.0" / >一定要设置在主项目下的web.config中才有用。
(唉~ 我也是因为这个原因,才弄了一个上午才成功)

到此,问题解决,希望对碰到同样问题的朋友带来帮助。s
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论4条
  • #1楼  评论人:自摸西暗杠  评论时间:2013-3-14 16:30:58
  • 第三个好用
  • #2楼  评论人:额发送到  评论时间:2013-8-11 13:42:28
  • 飒飒地方
  • #3楼  评论人:匿名  评论时间:2013-8-11 13:44:26
  • 你这样就完了! 每次Request时则不会检查安全性 从客户端中检测到有潜在危险的 Request.Form 值 主要是编辑器文本中有Html标签或脚本 你在控制器里Request它的值就会出错 解决办法是在控制器方法上加
    [ValidateInput(false)]
    接着在控制器中使用FormCollection来获取编辑器的值就OK了 不要使用Request 就算加了[ValidateInput(false)]
    但你要使用Request 同样会抛出异常 请改用 FormCollection获取
  • #4楼  评论人:Wyf  评论时间:2013-8-12 9:15:55
  • 多谢楼上补充~
发表评论:
留言人:
内  容:
请输入问题 58+41=? 的结果(结果是:99)
结  果: