繁体   English   中英

使用Razor时,我们仍然需要禁用请求验证吗?

[英]Do we still need to disable request validation when using Razor?

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

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

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

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

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

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

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

不,在Razor页面生成过程中仅依靠HTML编码并关闭请求验证并不是对抗XSS攻击的好策略:

  • 请求验证首先可以防止错误的用户输入进入您的数据库/存储/其他用户屏幕。
  • HTML编码(消毒)作为备份策略存在,例如,攻击者已经闯入大门。
  • 考虑到一个应用程序不仅可以提供HTML服务,例如Xml和REST服务,还可以不受HTML帮助程序的编码。 (例如,攻击者可能会找到一种将恶意有效负载放入Xml CDATA部分的方法)
  • 另外,考虑对数据库运行常规的Sql / NoSql查询,以寻找迹象表明您的站点请求验证已受到威胁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM