我收到错误


  从客户端检测到潜在的危险Request.Form值


部署应用程序时(通过本地主机运行时不会发生错误)。

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

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

我还需要做其他配置吗?我读过添加

<httpRuntime requestValidationMode="2.0"/>


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

有任何想法吗?

最佳答案

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


[ValidateInput(false)]可以使用,但是正如您所说,它可能不安全,因为它禁用了所有属性的验证。

我会坚持使用[AllowHtml]



更新:

[AllowHtml][ValidateInput(false)]都可以在ASP.NET MVC 3中直接使用,而无需在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" />
}


提交表单后,不会引发任何异常。

关于c# - “潜在危险的Request.Form值”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7281673/

10-12 22:29