ASP.NET 提供了一个额外的层来保护您的应用程序免受 XSS 攻击和注入,这通常称为请求验证。
在他们的官方主题上,他们提到:
即使您使用请求验证,您也应该对从用户那里获得的文本进行 HTML 编码,然后再将其显示在页面上。
假设 Web 应用程序不验证或清理发送到服务器的任何数据但启用了该功能,那么如何绕过这个额外的层来提交恶意代码?ASP.NET 应用程序是否需要此功能?
ASP.NET 提供了一个额外的层来保护您的应用程序免受 XSS 攻击和注入,这通常称为请求验证。
在他们的官方主题上,他们提到:
即使您使用请求验证,您也应该对从用户那里获得的文本进行 HTML 编码,然后再将其显示在页面上。
假设 Web 应用程序不验证或清理发送到服务器的任何数据但启用了该功能,那么如何绕过这个额外的层来提交恶意代码?ASP.NET 应用程序是否需要此功能?
作为一名渗透测试人员,我发现“请求验证”在许多情况下都会失败。开发人员倾向于相信"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。