“潜在危险的Request.Form值”

时间:2011-09-02 09:41:00

标签: c# asp.net asp.net-mvc asp.net-mvc-3

我收到错误

  

从客户端

检测到潜在危险的Request.Form值

当我部署我的应用程序时(当我通过localhost运行时不会发生错误)。

提交表单时会出现这种情况,因为其中一个字段包含HTML。我在模型中的属性周围添加了[AllowHtml],对应于有问题的表单字段,但这似乎不起作用。

我宁愿不在动作方法上使用[ValidateInput(false)],原因很明显,无论如何,这似乎也不起作用。

我还需要做其他任何配置吗?我已经读过添加

<httpRuntime requestValidationMode="2.0"/>

到web配置文件可以解决它,但我再次不想添加它,因为我仍然需要对我的应用程序的其他部分进行安全验证。

有什么想法吗?

1 个答案:

答案 0 :(得分:8)

[AllowHtml]要求您添加<httpRuntime requestValidationMode="2.0"/>(设置此值并不意味着您没有获得安全验证,它只是验证模式)。网站的其他部分将是安全的,您只能对视图模型上的特定属性禁用验证。

[ValidateInput(false)]可以正常工作,但正如您所说,它可能不太安全,因为它会禁用所有属性的验证。

我会坚持使用[AllowHtml]


更新:

{MV} 3中[AllowHtml][ValidateInput(false)]开箱即用,无需在web.config中添加<httpRuntime requestValidationMode="2.0"/>。这在ASP.NET 4.0下运行的ASP.NET MVC 2中是必需的

以下是一个例子:

查看型号:

public class MyViewModel
{
    [AllowHtml]
    public string Text { get; set; }
}

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            Text = "<html/>"
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return View(model);
    }
}

查看:

@model MyViewModel
@using (Html.BeginForm())
{
    @Html.TextAreaFor(x => x.Text)
    <input type="submit" value="OK" />
}

提交表单时不会抛出任何异常。