ResolveUrl XSS 问题的全局解决方案

Global solution for ResolveUrl XSS issue

我们最近完成了安全扫描,结果表明我们的应用程序容易通过 ResolveUrl cookieless 状态问题受到 XSS described here

现在我正在寻找一种方法来以全局方式为我们的应用程序正确解决该问题。不使用 ResolveUrl 并不是一个真正的选择,因为我们确实在 1000 多个地方使用它。我觉得很奇怪 ASP.NET(据我所知)无法完全禁用 cookieless 状态 url 解析,因为我们没有使用 cookieless 状态。

我尝试在 BeginRequest 中执行检查,以删除 url 中以 (.( 开头的路径段(. 开始任何字符)的请求.这会起作用,因为我们应用程序中的实际 url 没有以此开头的路径段。但是,问题是,我们可以从请求中读取的 url 不再有此路径段。它似乎在我们的代码开始执行之前被运行时过滤掉了。

我还有哪些其他选择?

最终我使用了 UrlRewrite 模块的规则,使用与我原来的问题相同的正则表达式来简单地阻止所有请求。此模块在 .net 从请求中删除无 cookie 会话 ID 之前运行 url,因此我可以阻止请求

这是我们在 UrlRewrite 规则中使用的正则表达式模式

.*/\([a-zA-Z]\(.*

使用 Abort Request 操作类型,这会匹配并阻止文章中描述的网址,例如

  • (A(XXXXXXXXXXX))
  • (S(XXXXXXXXXXX))
  • (F(XXXXXXXXXXX))