为什么验证请求取自ASP.net MVC?

时间:2008-11-29 12:45:13

标签: asp.net-mvc xss

在标准的ASP.net应用程序中,ASP.net提供了一些保护,防止XSS攻击,如果有人尝试,则使用validateRequest投掷检测危险的输入错误。这个功能似乎已经从MVC中取出了任何想法为什么?

4 个答案:

答案 0 :(得分:7)

我知道这个问题很老但我认为无论如何我都可以回答它。

有一个ValidateInput操作过滤器属性,可以添加到操作中。

[ValidateInput(true)]
public ActionResult Foo()
{

}

您还可以在模型属性

上使用AllowHtml属性
public class MyModel
{
    public Guid ID { get; set; }

    [AllowHtml]
    public string SomeStringValue { get; set; }
}

答案 1 :(得分:4)

这是一条难以跨越的界限。您的Web应用程序是否只是一个RESTful Web资源,就像它应该的那样?还是它试图做更多。接下来你知道你有100个隐藏的输入字段:__ OutlookSTATE,__ EVENTTARGET,__ EVENTARGUMENT等等。

如您所知,您仍然可以阻止MVC中的XSS攻击。只需google it即可查看几个示例。但原因基本上是MVC是一种不同的“清洁”类型的Web应用程序。

编辑:我不知道我上面说的是否清楚。但是这个想法是MVC不会试图超越它(就像ASP.NET那样)。他们都有自己的优点和理由。

答案 2 :(得分:2)

我希望你有一些比ValidateRequest更强大的功能来避免使用XSS。

答案 3 :(得分:1)

我发现ValidateRequest解决方案是一个黑客攻击。在我看来,“放弃XSS”是一个商业规则;因此让模型处理这种情况。

我非常喜欢有关更好地遵循REST原则的愿望的解释。至于100个隐藏的领域,它让我想起几年前我提供的ASP解决方案;我使用了大量隐藏字段来携带元数据。不漂亮。