资源 URL
非标准:此功能是非标准的,并且不在标准轨道上。请勿在面向 Web 的生产站点上使用它:它不会对每个用户都起作用。实现之间也可能存在很大的不兼容性,并且行为将来可能会发生变化。
资源 URL,以 resource:
方案为前缀的 URL,由 Firefox 和 Firefox 浏览器扩展用于在内部加载资源,但某些信息也提供给浏览器连接到的站点。
语法
资源 URL 由两部分组成:一个前缀 (resource:
) 和一个指向要加载的资源的路径
resource: <path>
一个示例
resource:/res/svg.css
当在资源 URL 中找到箭头('->')时,表示第一个文件加载了下一个文件
resource: <File-loader> -> <File-loaded>
请参阅URI 参考以获取更多一般详细信息。
在本文中,我们重点介绍资源 URL,Firefox 在内部使用它们来指向内置资源。
威胁
由于 resource:
URL 共享的某些信息可供网站访问,因此网页可以运行内部脚本并检查 Firefox 的内部资源,包括默认首选项,这可能是一个严重的安全和隐私问题。
例如,Browserleaks 上的一个脚本突出显示了当通过在站点上运行的简单脚本查询时 Firefox 公开的内容(您可以在https://browserleaks.com/resource-urls#more中找到代码)。
文件 firefox.js 将首选项名称和值传递给 pref() 函数。例如
http:/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。
另请参阅
- URI
- 什么是 URL?
- IANA URI 方案列表(
resource:
在此处介绍)