使用Razor时,我们是否还需要禁用请求验证?

时间:2015-01-05 04:07:38

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

在ASP.NET MVC视图中,通常使用Razor的语法绑定模型值:

@Html.DisplayFor(m => m.Name)

我们知道Razor默认会对该值进行html编码。但想象一下,恶意用户在文本框中输入脚本并提交它:

<script>alert('Executing evil script')</script>

现在,如果我们不使用[ValidateInput(false)][AllowHtml]属性,我们将会遇到HttpRequestValidationException,这意味着每次用户提交表单时都必须捕获此异常。

从另一个stackoverflow question的答案中,我知道我们可以在应用程序级别禁用请求验证,但许多人认为这是一种不好的做法。

我的问题是,鉴于我们让Razor逃脱所有&gt;&lt;,如果我们关闭请求验证,我们是否可以假设该网站仍然是安全的?

1 个答案:

答案 0 :(得分:0)

不,在Razor页面生成期间仅依赖HTML编码并关闭请求验证不是打击XSS攻击的好策略:

  • 请求验证可以防止错误的用户输入首先进入您的数据库/存储/其他用户屏幕。
  • Html编码(清理)是作为备份策略,例如攻击者已经进门了。
  • 考虑到应用程序可以提供的不仅仅是Html - 例如Xml和REST服务,不受Html帮助程序编码的影响。 (例如,攻击者可能会找到将恶意负载放入Xml CDATA部分的方法)
  • 另外,请考虑针对您的数据库运行常规Sql / NoSql查询,以查找您的网站请求验证已被泄露的迹象。