resource: URL

非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。

resource: scheme 为前缀的资源 URL,被 Firefox 和 Firefox 浏览器扩展用于内部加载资源,但其中一些信息也可以被浏览器连接到的站点获取。

语法

url
resource://<path>
resource

URL 的 scheme。

<path>

指向您要加载的资源的路径。

一个例子

url
resource://gre/res/svg.css

当资源 URL 中出现箭头 ('->') 时,表示第一个文件加载了下一个文件

url
resource://<File-loader> -> <File-loaded>

有关更通用的详细信息,请参阅 URI 参考

在本文中,我们将重点介绍 resource URL,它由 Firefox 内部用于指向内置资源。

威胁

由于 resource: URL 共享的部分信息可供网站访问,网页可以运行内部脚本并检查 Firefox 的内部资源,包括默认首选项,这可能是一个严重的安全和隐私问题。

例如,Browserleaks 上的一个脚本突出了 Firefox 在被网站上运行的脚本查询时会泄露哪些信息(您可以在 https://browserleaks.com/resource-urls#more 中找到代码)。

firefox.js 文件将首选项名称和值传递给 pref() 函数。例如

url
http://searchfox.org/mozilla-central/rev/48ea452803907f2575d81021e8678634e8067fc2/browser/app/profile/firefox.js#575

网站可以通过覆盖此 pref() 函数并使用脚本 resource:///defaults/preferences/firefox.js 来轻松收集 Firefox 的默认首选项。

此外,某些首选项的默认值因构建配置(如平台和区域设置)而异,这意味着网站可以使用这些信息来识别单个用户。

解决方案

为了解决这个问题,Mozilla 在 Firefox bug 863246 中更改了加载 resource: URL 的行为,该更改已合并到 Firefox 57 (Quantum) 中。

过去,Web 内容可以访问任何所需的 resource: URL — 不仅是 Firefox 的内部资源,还包括扩展的资产。现在,默认情况下禁止这种行为。

然而,在某些情况下,Firefox 仍然需要为 Web 内容加载资源。例如,如果您打开“查看源代码”页面(View Page Source 或 View Selection Source),您会发现它需要通过 resource: URL 来加载 viewsource.css。必须暴露给 Web 内容的资源已被移至名为 resource://content-accessible/ 的新位置,该位置是隔离的,并且仅包含非敏感资源。通过这种方式,我们可以保持必要的资源暴露,并消除大多数威胁。

注意: 建议 Web 和扩展开发人员不要再尝试使用 resource URL。它们的使用充其量是 hacky 的,并且大多数用法将不再有效。

规范

resource: 未在任何规范中定义。

浏览器兼容性

resource: 仅限于 Firefox。

另见