resource: URL
非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。
以 resource: scheme 为前缀的资源 URL,被 Firefox 和 Firefox 浏览器扩展用于内部加载资源,但其中一些信息也可以被浏览器连接到的站点获取。
语法
resource://<path>
一个例子
resource://gre/res/svg.css
当资源 URL 中出现箭头 ('->') 时,表示第一个文件加载了下一个文件
resource://<File-loader> -> <File-loaded>
有关更通用的详细信息,请参阅 URI 参考。
在本文中,我们将重点介绍 resource URL,它由 Firefox 内部用于指向内置资源。
威胁
由于 resource: URL 共享的部分信息可供网站访问,网页可以运行内部脚本并检查 Firefox 的内部资源,包括默认首选项,这可能是一个严重的安全和隐私问题。
例如,Browserleaks 上的一个脚本突出了 Firefox 在被网站上运行的脚本查询时会泄露哪些信息(您可以在 https://browserleaks.com/resource-urls#more 中找到代码)。
firefox.js 文件将首选项名称和值传递给 pref() 函数。例如
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。
另见
- URI
- 什么是 URL?
- IANA URI Scheme 列表(
resource:在此处涵盖)