資源 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。

另請參閱