跳轉至

建立 2026-09-17 更新 2026-09-17

權限與安全性

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 要這樣設計」的開發者。

下一步

了解權限設計後,前往 除錯與測試,學習開發過程中如何快速找出問題所在。