ASP.NET 的请求验证功能有多可靠?

信息安全 xss 注射
2021-09-09 21:48:53

ASP.NET 提供了一个额外的层来保护您的应用程序免受 XSS 攻击和注入,这通常称为请求验证

在他们的官方主题上,他们提到:

即使您使用请求验证,您也应该对从用户那里获得的文本进行 HTML 编码,然后再将其显示在页面上。

假设 Web 应用程序不验证或清理发送到服务器的任何数据但启用了该功能,那么如何绕过这个额外的层来提交恶意代码?ASP.NET 应用程序是否需要此功能?

2个回答

作为一名渗透测试人员,我发现“请求验证”在许多情况下都会失败。开发人员倾向于相信"Request Validation" == "magic",它可以完全保护他们免受 XSS 攻击,而实际上这种错误的安全感会导致非常严重的问题。所有形式的基于 DOM 的 XSS 和 Persistent XSS 都会绕过“请求验证”,还有其他情况会失败:

在下一种情况下,攻击者不需要编写 HTML 标记,只需编写一个 JavaScript URI,攻击者就可以执行 JavaScript:

<a href="javascript:alert(1)">xss</a>
<iframe src="javascript:alert(1)" />

在这种情况下,攻击者已经在脚本标签中写入:

<script>
  var x=alert(1);
</script>

是的,默认的请求验证不足以避免 XSS,但很大程度上取决于细节。

默认请求验证仅过滤标准字符,如 < 或 %,但根据您呈现结果的方式,仍然可以创建将被执行的内容。查看 XSS 的不同攻击向量。即使使用受限制的字符集,也有很多可能进行 XSS。