ASP.net请求验证&剃刀 - 我真的需要吗?

时间:2015-09-08 22:37:05

标签: asp.net-mvc security razor xss

我想知道我是否真的需要ASP.net请求验证(抛出“A potentially dangerous Request.Form value was detected from the client”的那个)?

我使用Razor模板引擎,只使用以下命令从我的数据库输出:

  • DisplayFor / EditorFor(转义HTML)
  • @Model.SomeField(转义HTML)
  • 需要HTML标记的特定字段通过HTML白名单清理专门转换为HtmlString个实例。

似乎我不需要任何请求验证,并且可以在用户输入HTML时没有异常的情况下禁用它,不是吗?或者我错过了什么?

什么是关闭它的首选方法?

2 个答案:

答案 0 :(得分:1)

可以禁用RequestValidation。这实际上是一种提高安全性的愚蠢方式,但微软试图让他们的东西变得傻逼(在我看来)。 "傻瓜型"有点苛刻 - 做正确的安全是很难的,我并不是说这是一件坏事,但如果这是你对抗XSS的唯一防线,那么你可能遇到麻烦。

话虽如此,听起来你需要在你的请求中加入特殊字符 - 所以你应该禁用它并确保正确地转义/编码你的输出。

这是禁用它的好资源:Request Validation in ASP.NET

相关位:

web.config(全局禁用)

<system.web>
    <httpRuntime requestValidationMode="2.0" />
</system.web>

方法(仅用于发送html的方法)

[ValidateInput(false)]
public ActionResult Edit(string comment)

属性(仅适用于包含html的一个属性)

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

在我看来,你应该在全局范围内启用它,但是尽可能小的一部分禁用它。在更安全的方面犯错更好,除非它使系统过于复杂,否则增加安全层通常是件好事。

因此,总而言之,如果您故意要允许这类请求,则无需进行请求验证,但要小心数据并确保不要为XSS打开自己。< / p>

答案 1 :(得分:0)

您可以通过添加[AllowHtml]属性来禁用特定属性。

但是如果你不是故意允许HTML,那么你应该验证它,因为有些人不仅可以添加标记,还可以添加类似警报的脚本(&#39; tard&#39;)

然后,每当有人加载您的页面时,都会受到侮辱:(