资源 URL

非标准:此功能是非标准的,并且不在标准轨道上。请勿在面向 Web 的生产站点上使用它:它不会对每个用户都起作用。实现之间也可能存在很大的不兼容性,并且行为将来可能会发生变化。

资源 URL,以 resource: 方案为前缀的 URL,由 Firefox 和 Firefox 浏览器扩展用于在内部加载资源,但某些信息也提供给浏览器连接到的站点。

语法

资源 URL 由两部分组成:一个前缀 (resource:) 和一个指向要加载的资源的路径

url
resource://<path>

一个示例

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

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

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

请参阅URI 参考以获取更多一般详细信息。

在本文中,我们重点介绍资源 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 错误 863246中更改了加载 resource: URL 的行为,该错误已在Firefox 57 (Quantum)中修复。

过去,Web 内容能够访问所需的任何 resource: URL——不仅是 Firefox 的内部资源,还有扩展的资源。现在,此行为默认被禁止。

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

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

规范

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

浏览器兼容性

resource: 仅限 Firefox。

另请参阅