擴充功能是否可存取網站和大部分 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 權限,但有一個警告。
開發需要權限且可選擇是否使用警告的功能做為選用功能,並以自然的方式導入這類功能,讓使用者能免除風險。此外,使用者也能進一步自訂擴充功能的使用體驗,並有機會說明警示內容。
改用 activeTab 權限
activeTab
權限可暫時授予使用者所在網站的暫時存取權,並允許擴充功能使用目前分頁上的 "tabs"
權限。在許多情況下,這會取代 "<all_urls>"
的需求,且在安裝時不會顯示警告。
不含 Active Tab:
使用 Active Tab:
activeTab
權限會在使用者叫用擴充功能時,授予擴充功能目前使用中分頁的臨時存取權。如果擴充功能遭駭,攻擊者就得等到使用者叫用擴充功能後才取得存取權,而且在分頁瀏覽或關閉之前,存取權會持續有效。
啟用分頁的 activeTab
權限時,擴充功能可以:
- 在該分頁上呼叫
tabs.executeScript
或tabs.insertCSS
。 - 透過傳回
tabs.Tab
物件的 API,取得該分頁的網址、標題和網站小圖示。 - 使用 webRequest API 攔截分頁至分頁的主要頁框來源的網路要求。擴充功能會暫時取得分頁主要頁框來源的主機權限。
下列使用者手勢會啟用 activeTab
:
- 執行瀏覽器動作
- 執行網頁動作
- 執行內容選單項目
- 透過 commands API 執行鍵盤快速鍵
- 接受 omnibox API 提供的建議
授予存取權
如果擴充功能需要存取 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"
警告。如要驗證最近顯示的擴充功能權限警告,請按照查看警告中的步驟操作。
權限 | 說明 | 警告 |
---|---|---|
|
授予所有主機的擴充功能存取權。您可以使用 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.tabs 和 chrome.windows。在許多情況下,擴充功能無需宣告 "tabs" 權限即可使用這些 API。 |
讀取瀏覽記錄 |
"topSites" |
授予擴充功能 chrome.topSites API 的存取權。 | 讀取最常造訪的網站清單 |
"ttsEngine" |
授予擴充功能存取 chrome.ttsEngine API 的權限。 | 讀取使用合成語音朗讀的所有文字 |
"webNavigation" |
授予擴充功能 chrome.webNavigation API 的存取權。 | 讀取瀏覽記錄 |
更新權限
更新具備其他權限的擴充功能可能會暫時停用。如果同意所有新的警告,使用者必須重新啟用警告。
如果使用者手動更新現在包含分頁權限的擴充功能,管理頁面就會顯示警告訊息。
如果擴充功能自動更新,擴充功能就會停用,直到使用者同意新權限為止。
如要避免這種情況,請將新功能設為選用功能,並在資訊清單的 optional_permissions
中新增權限更新。