自 2014 年以来,已知路径段会导致反射文件下载攻击。假设我们有一个易受攻击的 API,它反映了我们发送给它的任何内容:
https://google.com/s?q=rfd%22||calc||
{"results":["q", "rfd\"||calc||","I love rfd"]}
现在,这在浏览器中是无害的,因为它是 JSON,所以它不会被渲染,但浏览器宁愿提供将响应下载为文件。现在这里的路径段来帮助(攻击者):
https://google.com/s;/setup.bat;?q=rfd%22||calc||
分号 ( ;/setup.bat;
)之间的所有内容都不会发送到 Web 服务,而是浏览器会将其解释为文件名...以保存 API 响应。
现在,将下载并运行一个名为的文件setup.bat
,而无需询问运行从 Internet 下载的文件的危险(因为它的"setup"
名称中包含该词)。内容将被解释为 Windows 批处理文件,并calc.exe
运行命令。
预防:
- 清理 API 的输入(在这种情况下,它们应该只允许字母数字);逃避是不够的
- 添加
Content-Disposition: attachment; filename="whatever.txt"
不会被渲染的 API;谷歌错过了filename
实际上使攻击更容易的部分
- 将
X-Content-Type-Options: nosniff
标头添加到 API 响应