以下是我的前端应用程序加载所需 JS 文件的方式:
一个页面(在 HTTPS 上)将发送一个 POST 请求,描述应该从各种服务器加载哪些 JS 文件。有效载荷大致如下所示:
{
"1": "https://somehost.com/path/first.js",
"2": "https://someotherhost.com/path/second.js"
}
服务器将收集所有这些 JS 文件,将它们连接起来并发送回客户端。客户端将接收到的内容放在动态创建的<script>
标签中。
我们为此运行了 IBM Appscan,令我惊讶的是,Appscan 报告了远程文件包含漏洞,并且该工具能够向 JSON 添加第三个参数,实质上是修改了有效负载。所以它看起来像这样:
{
"1": "https://somehost.com/path/first.js",
"2": "https://someotherhost.com/path/second.js"
"3": "https://appscan-host/malicious-test.js"
}
我的问题是:
- 这真的是一个合理的场景吗?攻击者可以修改受害者浏览器发送的 POST 有效负载以包含远程恶意脚本?我只是无法解决这个问题-我确定我在这里遗漏了一些东西。
- 鉴于我们的架构可以在 JSON 有效负载中动态发送 JS 文件 URL 以供服务器加载并发送回客户端,我必须有哪些可能的解决方案来修复该漏洞?
- 我读到过使用HMAC对请求进行签名,但如果攻击者弄清楚了用于在客户端生成 HMAC 的算法,他可以在篡改后有效负载后重新计算 HMAC 并替换客户端发送的 HMAC,正确的?
此外,如果这有帮助,我们使用基于 cookie 的身份验证(Tomcat 服务器,在基于表单的身份验证之后为后续请求设置 JSESSIONID HttpOnly cookie)。