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:在此處涵蓋)