asp mvc“一个有潜在危险的Request.Form ......”

时间:2010-12-29 05:25:53

标签: asp.net asp.net-mvc

我发送带有html的帖子给控制器,并在Chrome中获得例外:

  

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

.net 4.0,webserver是webdev at vs2010 my config:

<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>

...

我错过了什么?

2 个答案:

答案 0 :(得分:21)

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

另一个重要的事情是你已经在web.config中使用了<httpRuntime requestValidationMode="2.0" />

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

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

答案 1 :(得分:5)

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

而不是在Controller Action上设置[ValidateInput(false)]。这对于防止XSS攻击没有帮助

  

ASP.NET MVC包含内置支持以防止HTML和跨站点   脚本注入攻击,并将   如果有人,默认情况下会抛出错误   尝试发布HTML内容作为输入。   开发人员需要明确指出   这是允许的(而且他们已经   希望安全地构建他们的应用程序   支持它)以实现它。   使用ASP.NET MVC 3,我们现在也是   支持你的新属性   可以适用于。的属性   models / viewmodels来表示   启用HTML输入,启用   DRY中更细粒度的保护   办法。在上个月的RC发布中   属性被命名   [SkipRequestValidation]。用RC2我们   将其重命名为[AllowHtml]来制作它   更直观:设置以上内容   一个[AllowHtml]属性   model / viewmodel将导致ASP.NET MVC   3关闭HTML注入   模型绑定时的保护   该财产。