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。

另見