【问题标题】:asp mvc "A potentially dangerous Request.Form..."asp mvc "一个潜在危险的 Request.Form..."
【发布时间】:2011-11-24 10:26:08
【问题描述】:

我正在向控制器发送带有 html 的帖子,并在 Chrome 中出现异常:

加载资源失败:服务器响应状态为 500(内部服务器错误)

.net 4.0,webserver 是 vs2010 的 webdev 我的配置:

<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></assemblies>
</compilation>
<httpRuntime requestValidationMode="2.0" />
<pages validateRequest="false">
<namespaces>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Routing"/>
</namespaces>
</pages>

...

我错过了什么?

【问题讨论】:

  • 请详细一点。
  • 基本上所有能让这个问题连贯的东西。

标签: asp.net asp.net-mvc


【解决方案1】:

您需要在要允许 HTML 的控制器操作上设置 [ValidateInput(false)]。 (或者在整个控制器上,但这是不好的做法。

另一件重要的事情是您已经在 web.config 中获得的 &lt;httpRuntime requestValidationMode="2.0" /&gt;

在 .aspx 文件或 web.config 中设置 RequestValidate 在 MVC 中不起作用,因为它是控制器,而不是请求验证的视图。

编辑:与此同时,MVC 3 发布了。这允许您使用 [AllowHtml] 装饰模型的各个属性,以确保它们安全,而无需完全禁用请求验证。

【讨论】:

  • @eba 小心使用它。将这些值回放给用户可能会导致 XSS 攻击。 html编码不足以阻止它。
  • Professional ASP.NET MVC 4 (Galloway etc) 中关于 XSS 和 Html 编码的非常好的部分 - 强烈推荐阅读,但他们强烈建议使用 AntiXSS 作为 4 上的默认编码器(Nuget 或wpl.codeplex.com)。 .....“AntiXSS 使用允许字符的白名单,而 ASP.NET 的默认实现使用禁止字符的有限黑名单。通过只允许已知的安全输入,AntiXSS 比试图阻止潜在有害输入的过滤器更安全。 “....同样,这不是解决方案,但它比允许它全部进入...
  • -1 不正确。在 .net 4.0 中,requestValidationModel 适用于所有请求,甚至是 mvc 请求。见:asp.net/whitepapers/aspnet4/breaking-changes#0.1__Toc256770147
【解决方案2】:

如果您使用的是 MVC 3 RC,则可以为您的属性使用新属性作为 [AllowHtml]

而不是在控制器操作上设置 [ValidateInput(false)]。- 这不会帮助您防止 XSS 攻击

ASP.NET MVC 包含内置支持以防止 HTML 和跨站点 脚本注入攻击,并将 如果有人默认抛出错误 尝试发布 HTML 内容作为输入。 开发者需要明确指出 这是允许的(并且他们已经 希望他们的应用程序能够安全地构建 支持它)以启用它。 有了 ASP.NET MVC 3,我们现在也是 支持您认为的新属性 可以应用于属性 模型/视图模型来表明 启用 HTML 输入,从而启用 在 DRY 中提供更细粒度的保护 方法。在上个月的 RC 版本中,这个 属性被命名 [跳过请求验证]。使用 RC2,我们 将其重命名为 [AllowHtml] 以使其 更直观:设置上面 [AllowHtml] 属性 model/viewmodel 会导致 ASP.NET MVC 3 关闭HTML注入 模型绑定时的保护 那个属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    相关资源
    最近更新 更多