我们最近对我们的生产 Web 应用程序进行了安全扫描,并收到了关于特定 URL 上潜在 XSS 漏洞的通知,该 URL 用于检索包含多个 js 文件的组合响应。
示例:http : //example.com/CombinedScripts?file=foo.js&file=bar.js
服务器将返回 foo.js 和 bar.js 组合/缩小/等的内容。如果您传入无效的文件名,它会在响应中包含在 javascript 的注释中找不到的文件名。
示例:/* 找不到文件 'foo2.js' */
我能够成功地制作一个指向此 CombinedScripts 处理程序的 HTML 页面,并使用带有如下 URL 的脚本标记显示一个警告框:
http://example.com/CombinedScripts?file=*/alert(1);/*
由于这个 URL 只返回 javascript(而不是 HTML),这实际上是一个 XSS 漏洞吗?
在整个站点中引用此 URL 的页面在生成 URL 时不使用任何不受信任的用户输入。
这里不涉及实际的 HTML,将用户直接指向此 URL 只会使 javascript 显示在他们的浏览器中,而不是执行它。
如果我有自己的 HTML 页面并且可以将恶意 URL 放在脚本标记中,那么我可以注入恶意 javascript,但它会在我已经控制的页面的上下文中运行,而不是在提供 javascript 的站点的上下文中运行我可以很容易地将脚本直接放在我控制的 HTML 页面中。