所以我在我的网络应用程序中请求验证。您可以添加/foo?=<script>
,我的 Web 应用程序不会捕获它 - 它不会过滤它 -
这是否使我容易受到攻击?我应该打开它吗?
所以我在我的网络应用程序中请求验证。您可以添加/foo?=<script>
,我的 Web 应用程序不会捕获它 - 它不会过滤它 -
这是否使我容易受到攻击?我应该打开它吗?
这取决于您是否在输出中正确编码字符。例如,对于 HTML,<
字符应编码为<
.
如果您在任何地方都这样做,那么您可以安全地关闭请求验证。
这是一种更好的方法,因为某些字符序列可以绕过 RV,具体取决于稍后使用输入的上下文。例如,如果该值使其成为 HTML 属性值,则类似的序列
" onerror="alert('xss')
插入时会绕过它
<img src="/foo.jpg" alt="<user input>" />
当这变成
<img src="/foo.jpg" alt="" onerror="alert('xss')" />
此外,来自 ASP.NET 以外的源的输入可能意味着脚本仍然可以插入到您的应用程序中。这就是为什么我推荐正确的输出编码而不是尝试验证输入的原因。全局验证输入是一个更大的问题,因为当没有验证上下文的选项时总会出现间隙。
请求验证虽然在某些情况下很有帮助,但 Microsoft 并不认为它是安全边界,因此当然不应该是您抵御攻击的唯一防御措施。也就是说,它是用于深度防御的有效工具,因此您应该启用它,除非您有特定的理由不启用它。
最终,您需要知道您的应用程序的威胁模型是什么样的,因此您可以采取周到的缓解措施,而不是简单地打开或关闭应用程序范围的选项,并希望获得最好的结果。