【问题标题】:A potentially dangerous Request.Form value was detected from the client - ASP.NET MVC从客户端检测到潜在危险的 Request.Form 值 - ASP.NET MVC
【发布时间】:2009-09-21 16:48:51
【问题描述】:

我在我的 ASP.NET MVC 应用程序中收到此错误,我从 WYSIWYG 获取 HTML 输入,因此我不希望验证内容。

我尝试了找到here 的解决方案,但它似乎对我的 MVC 应用程序没有任何影响。我也尝试在 web.config 中这样做,但又一次 - 不高兴。
这是 ASP.NET MVC 中的错误还是什么?

【问题讨论】:

  • Kelix,你提到的帖子带有建议使用 [pages requestValidation="false"] web.config 参数或视图的 [@Page ValidateRequest="False"] 属性.这些选项中的任何一个都应该可以正常工作。

标签: asp.net-mvc dangerous-request


【解决方案1】:

在 MVC 中,您将使用 ValidateInput(false) 属性。

然后您需要清理您的输入,例如使用 this 之类的东西(内置于 ASP.NET 4.5+;之前使用 NuGet 包)。

【讨论】:

  • web.config 中还必须有
  • [AllowHtml] 如果可以的话,模型属性会更好。
  • 禁用验证不是执行此操作的安全方法,尤其是当您的应用程序面向公共 Internet 时。考虑使用更细化的[AllowHtml] 属性
  • @jazzcat 我同意,但 [AllowHtml] 在 2009 年不存在
【解决方案2】:

在 MVC 3 及更高版本中,您还可以使用 [AllowHtml] 属性。此属性允许您通过跳过仅对模型上的一个属性进行验证来更细化。

https://docs.microsoft.com/en-us/dotnet/api/system.web.mvc.allowhtmlattribute?view=aspnet-mvc-5.2

【讨论】:

  • 为我工作,这似乎比 '[ValidateInput(false)]' 更安全,谢谢
  • 必须应用于模型属性以及相应的视图模型属性,然后它才起作用。
  • 在我的模型中使用此属性 [AllowHtml],摆脱了错误。它还会捕获跨站点脚本吗?
  • 不,它不会捕获跨站点脚本。选择此属性意味着您将在输出内容之前自行对内容进行安全编码,或者您正在为某种 CMS 开发 HTML 编辑器,您实际上希望允许用户输入 HTML/脚本以运行它们.
【解决方案3】:

只需将此属性:[ValidateInput(false)] 放在处理表单发布的控制器上的操作方法上。

【讨论】:

    【解决方案4】:

    在网络配置中使用<httpRuntime requestValidationMode="2.0" />

    【解决方案5】:

    在你的控制器动作方法中,(带来这个的那个)添加 [ValidateInput(false)]

    例子

        [HttpPost]
        [ValidateInput(false)]
        public ActionResult Insert(FormCollection formCollection, Models.Page page)
        {
            //your code
            return View();
        }
    

    【讨论】:

      猜你喜欢
      • 2018-03-19
      • 2015-02-05
      • 2014-02-11
      • 1970-01-01
      • 2012-05-29
      相关资源
      最近更新 更多