是否为 DOM XSS 误报

Is it a false postive for DOM XSS

我使用 IBM AppScan 扫描我的网站。其中一个漏洞被发现称为 "DOM XSS"。经过调查,我怀疑这可能是误报。有谁知道是否可以根据我的以下代码对其进行注入?

它看起来像是一个子域解析例程,将 document.domain 设置为此值

例如如果当前 URL 是 http://www.example.com/ 那么 document.domain 设置为 example.com.

这似乎是误报,因为即使使用不受信任的输入来设置域以放松同源策略限制,设置 document.domain 仅对当前域的子域有效,因此很难将其操纵成恶意的东西。

也就是说,如果 example.edu 将它们的 document.domain 设置为 example.com 那么浏览器将不会接受,因为域本身不匹配并且浏览器将不允许任何内容在尝试 com 的情况下设置为顶级域。

解析 href 并不是执行此操作的最佳方法 - location object 中还有其他可用属性,例如 .hostname。如果解析例程中存在缺陷,则可以通过在 URL:

中的其他位置提交主机名来欺骗代码
http://www.example.com?injectedHostname=http://www.example.org

话虽如此,我看不出您当前的函数实现可能会被滥用。

这不是传统的 HTML/script 注入 DOM,因此它不是人们通常所说的“DOM XSS”,但 AppScan 已检测到它,因为数据正在从不受信任的来源(文档 URL)到危险的接收器(安全敏感的 document.domain 属性),这通常是一件冒险的事情。

如果攻击者可以影响 document.domain 确实有可能允许跨源脚本,尽管它必须来自相邻域(因为 document.domain 不能设置为例如,TL​​D),这样可以稍微限制损害。

如果您必须从浏览器地址自动设置document.domain,那么为了安全地进行设置,您应该(a)直接阅读location.hostname尝试拆分 location.href,并且 (b) 确保应用程序的部署使其仅响应其真实主机名。如果攻击者将他们自己的 DNS 指向您服务器的 IP 地址,则应用程序不应出现。完成后,您仍然需要忽略警告。

如果可能,将 document.domain 设置为不是来自输入的特定静态值(例如从配置中获取)将是一个更好的方法。