在ASP.NET MVC视图中,通常使用Razor的语法绑定模型值:
@Html.DisplayFor(m => m.Name)
我们知道Razor默认会对该值进行html编码。但想象一下,恶意用户在文本框中输入脚本并提交它:
<script>alert('Executing evil script')</script>
现在,如果我们不使用[ValidateInput(false)]
或[AllowHtml]
属性,我们将会遇到HttpRequestValidationException
,这意味着每次用户提交表单时都必须捕获此异常。
从另一个stackoverflow question的答案中,我知道我们可以在应用程序级别禁用请求验证,但许多人认为这是一种不好的做法。
我的问题是,鉴于我们让Razor逃脱所有>
和<
,如果我们关闭请求验证,我们是否可以假设该网站仍然是安全的?
答案 0 :(得分:0)
不,在Razor页面生成期间仅依赖HTML编码并关闭请求验证不是打击XSS攻击的好策略: