宣告權限並警告使用者

擴充功能是否可存取網站和大部分 Chrome API,取決於所宣告的權限。權限應限制為只滿足其功能所需。限制權限會建立擴充功能的功能,並在攻擊者入侵擴充功能時減少資料造成的影響。實作明確、最低和選用權限,保護擴充功能和使用者。

整理權限

權限是參照 Chrome API 或授予一或多個主機存取權的比對模式的已知字串。清單中會列出這些權限,並指定為必要權限或選用權限

{
  "name": "Permissions Extension",
  ...
  // required permissions
  "permissions": [
    "activeTab",
    "contextMenus",
    "storage"
  ],
  // optional permissions
  "optional_permissions": [
    "topSites",
    "http://www.developer.chrome.com/*"
  ],
      ...
  "manifest_version": 2
}

將必要權限限制為只提供擴充功能核心功能所需的權限。擴充功能不應要求超過目前所需的權限;日後不會透過要求更新時可能需要的權限。

選用功能所需的權限應註冊為選用權限。這可讓使用者決定他們願意授予擴充功能多少存取權,以及需要哪些功能。

確認必要權限

簡單的擴充功能可能需要要求多項權限,許多權限會在安裝時顯示「警告」。如果擴充功能發出有限的警告或獲得權限,使用者就較可能信任這類擴充功能。

安裝時擴充功能權限警告

找出擴充功能的核心功能及需要的權限。如果功能需要含有警告的權限,請考慮將其設為選用功能。

透過事件觸發選用權限

選用權限範例擴充功能的核心功能會覆寫新分頁。 其中一項功能是顯示使用者當天的目標。這項功能只需要「儲存空間」權限,不包含警告。

可啟用其他功能的擴充功能按鈕

這個擴充功能還有一項功能,可顯示使用者的熱門網站。這項功能需要 topSites 權限,但有一個警告。

TopSite API 的擴充功能警告

開發需要權限且可選擇是否使用警告的功能做為選用功能,並以自然的方式導入這類功能,讓使用者能免除風險。此外,使用者也能進一步自訂擴充功能的使用體驗,並有機會說明警示內容。

改用 activeTab 權限

activeTab 權限可暫時授予使用者所在網站的暫時存取權,並允許擴充功能使用目前分頁上的 "tabs" 權限。在許多情況下,這會取代 "<all_urls>" 的需求,且在安裝時不會顯示警告。

不含 Active Tab:

未啟用分頁的權限使用者介面

使用 Active Tab:

含有有效分頁的權限 UI

activeTab 權限會在使用者叫用擴充功能時,授予擴充功能目前使用中分頁的臨時存取權。如果擴充功能遭駭,攻擊者就得等到使用者叫用擴充功能後才取得存取權,而且在分頁瀏覽或關閉之前,存取權會持續有效。

啟用分頁的 activeTab 權限時,擴充功能可以:

  • 在該分頁上呼叫 tabs.executeScripttabs.insertCSS
  • 透過傳回 tabs.Tab 物件的 API,取得該分頁的網址、標題和網站小圖示。
  • 使用 webRequest API 攔截分頁至分頁的主要頁框來源的網路要求。擴充功能會暫時取得分頁主要頁框來源的主機權限。

下列使用者手勢會啟用 activeTab

授予存取權

如果擴充功能需要存取 file:// 網址或在無痕模式下操作,使用者必須前往 chrome://extensions 的擴充功能詳細資料頁面啟用這些功能的存取權。

允許擴充功能詳細資料頁面的檔案網址和無痕模式

擴充功能可以呼叫 extension.isAllowedIncognitoAccess(),或利用 extension.isAllowedFileSchemeAccess()file:// 網址上執行,藉此偵測是否已啟用無痕模式。

瞭解權限

權限警告是用來說明 API 授予擴充功能使用者的功能,但一開始其中部分警告可能並不明顯。舉例來說,新增 "tabs" 權限會導致看似不相關的警告:擴充功能可以讀取瀏覽活動。雖然 chrome.tabs API 可能只用於開啟新分頁,但您也可以透過 tabs.Tab 物件查看與每個新開啟分頁相關聯的網址。

如果可以,請實作選用權限或功能較強大的 API,避免發出警示警告。

查看警告

如果載入的擴充功能為未封裝檔案,系統就不會顯示權限警告。如要查看擴充功能的權限警告,請前往 chrome://extensions,確認開發人員模式已啟用,然後按一下「PACK EXTENSION」

已檢查開發人員模式,然後按一下「封裝擴充功能」

在「Extension」(擴充功能) 根目錄欄位中指定擴充功能資料夾的路徑,然後按一下「Pack Extension」按鈕。如果是首次套件,請忽略「私密金鑰」欄位。

指定擴充功能路徑,然後按一下「封裝擴充功能」

Chrome 會建立兩個檔案:.crx 檔案和 .pem 檔案,其中包含擴充功能的私密金鑰。

封裝的擴充功能檔案

別遺失私密金鑰!.pem 檔案保存在安全的地方;這個檔案需要更新擴充功能。

.crx 檔案拖曳到 Chrome 擴充功能的管理頁面中,即可進行安裝。

拖曳檔案即可安裝

捨棄 .crx 檔案後,瀏覽器會詢問是否能新增擴充功能,並顯示警告。

新分頁擴充功能警告

有警告的權限

注意:權限資料表會盡可能更新,且可能會與目前的警告有些微差異。此外,某些權限在與其他權限配對時可能不會顯示警告。例如,如果擴充功能也要求 "<all_urls>",系統就不會顯示 "tabs" 警告。如要驗證最近顯示的擴充功能權限警告,請按照查看警告中的步驟操作。

權限 說明 警告
  • "http://*/*"
  • "https://*/*"
  • "*://*/*"
  • "<all_urls>"
授予所有主機的擴充功能存取權。您可以使用 activeTab 權限,避免宣告任何主機權限。 讀取及變更你造訪的網站上的所有資料
"https://HostName.com/" 將擴充功能存取權授予 "https://HostName.com/"。您可以使用 activeTab 權限,避免宣告任何主機權限。 讀取及變更你在 HostName.com 上的資料
"bookmarks" 授予擴充功能存取 chrome.bookmarks API 的權限。 讀取及變更書籤
"clipboardRead" 如果擴充功能使用 document.execCommand('paste'),則為必要欄位。 讀取你複製和貼上的資料
"clipboardWrite" 表示擴充功能使用了 document.execCommand('copy')document.execCommand('cut') 修改你複製和貼上的資料
"contentSettings" 授予擴充功能存取 chrome.contentSettings API 的權限。 變更設定來控管網站對 Cookie、JavaScript、外掛程式、地理位置、麥克風、攝影機等功能的存取權。
"debugger" 將擴充功能存取權授予 chrome.debugger API。
  • 存取頁面偵錯工具後端
  • 讀取及變更你造訪的網站上的所有資料
"declarativeNetRequest" 授予擴充功能存取 chrome.declarativeNetRequest API 的權限。 封鎖網頁內容
"desktopCapture" 授予擴充功能存取 chrome.desktopCapture API 的權限。 擷取螢幕畫面內容
"downloads" 將擴充功能存取權授予 chrome.downloads API。 管理下載內容
"geolocation" 允許擴充功能使用 HTML5 geolocation API,而不會提示使用者授予權限。 偵測您的實際位置
"history" 授予擴充功能存取 chrome.history API 的權限。 讀取及變更瀏覽記錄
"management" 授予擴充功能 chrome.management API 的存取權。 管理應用程式、擴充功能和主題
"nativeMessaging" 將擴充功能存取權授予原生訊息 API 與合作的原生應用程式通訊
"notifications" 授予擴充功能對 chrome.notifications API 的存取權。 顯示通知
"pageCapture" 將擴充功能存取權授予 chrome.pageCapture API。 讀取及變更你造訪的網站上的所有資料
"privacy" chrome.privacy API 的存取權授予擴充功能。 變更隱私權相關設定
"proxy" 將擴充功能存取權授予 chrome.proxy API。 讀取及變更你造訪的網站上的所有資料
"system.storage" 授予擴充功能 chrome.system.storage API 的存取權。 識別並退出儲存裝置
"tabCapture" 授予擴充功能存取 chrome.tabCapture API 的權限。 讀取及變更你造訪的網站上的所有資料
"tabs" 將擴充功能存取權授予多個 API 使用 Tab 物件中的特殊權限欄位,包括 chrome.tabschrome.windows。在許多情況下,擴充功能無需宣告 "tabs" 權限即可使用這些 API。 讀取瀏覽記錄
"topSites" 授予擴充功能 chrome.topSites API 的存取權。 讀取最常造訪的網站清單
"ttsEngine" 授予擴充功能存取 chrome.ttsEngine API 的權限。 讀取使用合成語音朗讀的所有文字
"webNavigation" 授予擴充功能 chrome.webNavigation API 的存取權。 讀取瀏覽記錄

更新權限

更新具備其他權限的擴充功能可能會暫時停用。如果同意所有新的警告,使用者必須重新啟用警告。

如果使用者手動更新現在包含分頁權限的擴充功能,管理頁面就會顯示警告訊息。

新增分頁權限

如果擴充功能自動更新,擴充功能就會停用,直到使用者同意新權限為止。

已停用擴充功能

同意授予權限

如要避免這種情況,請將新功能設為選用功能,並在資訊清單optional_permissions 中新增權限更新。