本地 HTML 文件中的恶意 Javascript 可以在 Firefox/Chrome 中将文件发送到互联网吗?

信息安全 网页浏览器 javascript 应用安全 铬合金 火狐
2021-09-04 09:10:10
  1. 从随机网站下载 example.html -file 到我的电脑桌面
  2. 使用 Google Chrome 从桌面打开 example.html 文件
  3. 现在 Chrome 从 example.html 文件执行 javascript,该文件从桌面或文档目录中搜索计算机文件并将它们发送到攻击者控制的网站或服务器

javascript 可以从桌面搜索我的文件并将它们发送给攻击者吗?这可能吗?

如果这种情况是可能的,那么如何阻止这种攻击呢?

2个回答

javascript 可以从桌面搜索我的文件并将它们发送给攻击者吗?

从历史上看,是的,浏览器将该file:方案视为一个独特的来源,您描述的攻击本来是可行的。

但是今天,不, Chrome 和 Firefox 强制执行限制本地文件之间访问的同源策略。(但是,并非所有浏览器都这样做。最值得注意的是,Microsoft Edge 仍然不限制本地文件之间的读取访问,正如@dandavis 所发现的那样。)

也就是说,当您file:///downloads/malicious.html在其中一个浏览器中打开 HTML 文件时,该文档中的脚本无法自由搜索文件系统并发送家庭敏感文件。但是,该file:计划中 SOP 的具体实施方式因浏览器而异,并且没有很好的文档记录——而且似乎也没有一个既定的标准。

Mozilla在此处记录了一些(可能已过时)详细信息:

从 Gecko 1.9 [Mozilla 的浏览器引擎] 开始,文件只能读取某些其他文件。具体来说,一个文件只有在源文件的父目录是目标文件的祖先目录时才能读取另一个文件但是,不能以这种方式加载目录。

例如,如果您有一个foo.html访问另一个文件的文件bar.html,并且您已从该文件导航到该文件index.html,则只有bar.htmlindex.htmlindex.html.

我找不到任何与 Chrome 相关的文档,但文件间访问似乎已被完全锁定。file:例如,Chrome 不允许我对URI发出跨域请求:

加载失败file:///tmp/malicious.html:跨源请求仅支持协议方案:http, data, chrome, chrome-extension, https.

即使尝试让file:文档访问具有相同 URI 的 iframe 的 DOM 也失败了:

未捕获的 DOMException:阻止具有源“null”的框架访问跨域框架。


也就是说,在本地打开不受信任的 HTML 文件仍然比从网站加载它们更危险。尽管他们可能无法读取所有本地文件,但他们仍然可以使用 XSSI(跨站点脚本包含)等攻击来使其他本地文件潜在地泄露敏感信息。

不,这是不可能的,而且有充分的理由。

在浏览器中运行的非特权 JavaScript 没有任何 API 来搜索文件系统。此外,像 AJAX 和画布数据访问这样的 API 不适用于文件系统上的文件,从而阻止读取已知路径的文件。有些浏览器走得更远,甚至根本不会从高于文件本身的目录间接加载任何内容(HTML、图像、CSS 等)。

一些浏览器可能会为浏览器扩展(Firefox 曾经)中的特权内容提供文件系统 API,但 Web 内容无法访问。

可能的唯一方法是,如果代码有一个浏览器漏洞,该漏洞突破了 JavaScript 运行时和浏览器使用的任何操作系统级沙盒。不过,如果不先下载它,这样的漏洞利用可能也能正常工作。