權限與安全性
Chrome Extension 能存取分頁內容、瀏覽紀錄、甚至修改網頁,因此擁有不小的權力。Manifest V3 在設計上刻意收緊了這些能力,這一頁說明權限系統怎麼運作,以及 Manifest V3 帶來哪些安全限制。
permissions、host_permissions、optional_permissions
permissions:使用 Chrome API 的權限,例如"storage"、"contextMenus"、"alarms"。host_permissions:允許擴充功能存取的網站網域,例如"https://*.example.com/*",會出現在使用者安裝時的確認畫面。optional_permissions:安裝時不會馬上要求的權限,等真正需要時再用chrome.permissions.request()向使用者請求,讓大部分使用者一開始看到的權限清單更短、更容易信任。
manifest.json(片段)
{
"permissions": ["storage", "activeTab"],
"optional_permissions": ["notifications"],
"host_permissions": []
}
權限最小化原則
- 能用
activeTab(使用者主動點擊才暫時授權當前分頁)就不要用寬鬆的host_permissions或<all_urls>。 - 能用
chrome.scripting.executeScript動態注入(見 chrome.tabs 與 chrome.scripting),就不要用content_scripts對所有網頁靜態注入。 - 不確定會不會用到的權限先不要加,之後版本更新再補;權限清單越短,使用者安裝意願與審核通過率通常越高。
Manifest V3 的安全限制
相較於 Manifest V2,V3 收緊了幾項容易被濫用的能力:
- 不能執行遠端程式碼:所有 JavaScript 都必須包在擴充功能安裝包裡,不能在執行期從外部網址下載並執行程式碼,降低了被植入惡意程式的風險。
- 內容安全政策(CSP)更嚴格:預設禁止
eval()、內嵌<script>等可能執行任意字串的寫法。 webRequest阻塞式攔截改為declarativeNetRequest:改用宣告式規則過濾或修改網路請求,瀏覽器自己執行規則,擴充功能不再能即時攔截並讀取每一筆請求內容,效能與隱私都更好。
這些限制的目的都是同一個:讓 Chrome(而不是擴充功能本身)能夠預先確定程式碼的行為邊界,減少大規模資料外洩或惡意注入的空間。
推薦影音
Google I/O 2024:Manifest V3 現況與未來方向
簡述:Chrome 團隊在 Google I/O 2024 的官方場次,說明 Manifest V2 淘汰進度、Manifest V3 的安全與效能考量,以及擴充功能平台的最新發展方向,適合想理解「為什麼 Manifest V3 要這樣設計」的開發者。
下一步
了解權限設計後,前往 除錯與測試,學習開發過程中如何快速找出問題所在。