軟體瀏覽器原理:為什麼擴充功能

computer%20screen%20showing%20data%20visualization...
發表時間:2026 年 10 月 27 日 | 更新日期:2026 年 10 月 27 日 | 編輯:雅寶社區編輯團隊
軟體瀏覽器原理:為什麼擴充功能 - 雅寶社區 · 頂客論壇

網路層與儲存層:連線與記憶

網路層負責 DNS 查詢、TCP/TLS 連線、HTTP 快取、Cookie 管理等工作。儲存層則包含 localStorage、IndexedDB、Cache Storage 等機制。這兩個子系統看起來很底層,卻與擴充功能息息相關:擴充功能可以攔截、修改、阻擋網路請求(在 Manifest V3 之前尤其明顯),也可以利用瀏覽器提供的儲存 API 保存自己的設定與資料。

換句話說,擴充功能不是「附掛在網頁上的小工具」,它是掛載在瀏覽器架構上的獨立程式,能夠同時接觸網路層、渲染層與儲存層。理解了這一點,後面的風險討論才有意義。

二、多程序架構與沙箱:安全性的地基

現代瀏覽器(尤其是 Chromium 系)採用多程序架構。每一個分頁、每一個網站實例,通常會被分配到獨立的渲染程序(Renderer Process)中執行。這個設計不只為了穩定,更為了安全。

為什麼一個分頁當掉,不會拖垮整個瀏覽器

如果你用過早期的瀏覽器,應該記得「一個網頁卡住,全部分頁一起死」的惡夢。多程序架構解決了這個問題:每個渲染程序各自獨立,某個網頁的 JavaScript 進入無限迴圈或記憶體爆掉,只會影響那一個程序,其他分頁與瀏覽器介面依然可以正常運作。

更進一步的設計是「站點隔離」(Site Isolation)。Chrome 會把不同網站的內容放進不同的程序,即使它們透過 iframe 嵌入在同一個頁面裡也一樣。這樣做的目的是防止一個惡意網站透過側通道(如 Spectre 類型的攻擊)去讀取另一個網站的資料。

沙箱:讓渲染程序「無害化」

光是把程式分開還不夠,渲染程序本身還被放進「沙箱」(Sandbox)中執行。沙箱限制了程序能做的事情:不能任意讀寫檔案系統、不能直接開啟網路連線、不能存取其他程序的内存。所有需要特權的操作,都必須透過 IPC(跨程序通訊)請求瀏覽器主程序代為執行,而主程序會檢查這些請求是否合法。

這套「最小權限原則」是瀏覽器安全模型的核心。網站拿到的權限極其有限,因此即使網站被駭,攻擊者能做的事情也受到嚴格限制。

那擴充功能站在哪個位置?

關鍵來了:擴充功能並不完全等於網頁。它擁有自己的來源(Origin),網址形式是 chrome-extension://<extension-id>,與一般網站隔離。它也能呼叫一般網頁無法呼叫的專屬 API,例如分頁管理、書籤管理、下載管理、歷史紀錄查詢等。

換句話說,擴充功能是一種「被瀏覽器信任、但由第三方撰寫」的程式。瀏覽器透過權限清單(Permissions)來約束它,但這個約束的粒度,遠比對網頁的約束來得寬鬆。這也是為什麼擴充功能同時是瀏覽器生態的最大創新來源,也是最大的攻擊面之一。

三、擴充功能的技術原理:一個「有權限的小型網頁應用」

要真正理解擴充功能,最好的方式是把它想成「一個被瀏覽器特別對待的小型網頁應用程式」。它有自己的 HTML、CSS、JavaScript,有自己的儲存空間,也有自己的生命週期——只是它運行的環境是瀏覽器,而不是一般的網站伺服器。

manifest.json:擴充功能的身分證

每一個擴充功能都必須有一個 manifest.json 檔案,這是它的「身分證」兼「權限申請書」。這個檔案會宣告幾件重要的事情:擴充功能的名稱、版本、描述、圖示,以及最關鍵的——它需要哪些權限。

權限大致可以分成兩類。第一類是 API 權限,例如 tabs(讀取分頁資訊)、bookmarks(書籤存取)、history(瀏覽紀錄)、downloads(下載管理)、storage(本機儲存)。第二類是主機權限(Host Permissions),用來指定擴充功能可以存取哪些網站,例如「只在 example.com 上運作」或「在所有網站上運作」。

這份清單不只給開發者看,也會在安裝時以「權限警告」的形式呈現給使用者。問題是,多數使用者根本不會細看,這正是風險的起點。

內容腳本與隔離世界

內容腳本(Content Script)是擴充功能注入到網頁中的 JavaScript。它可以直接讀寫網頁的 DOM,因此能實現「修改頁面樣式」「隱藏特定元素」「自動填表」這類功能。

但這裡有個很重要的設計:內容腳本運行在「隔離世界」(Isolated World)中。它與網頁本身的 JavaScript 共享同一份 DOM,卻擁有各自獨立的 JavaScript 執行環境。網頁看不到內容腳本的變數,內容腳本也不會意外污染網頁的全域變數。這是一種兼顧「功能」與「穩定」的折衷設計。

不過要注意,共享 DOM 本身就是一個潛在風險。惡意內容腳本可以讀取你在頁面上輸入的密碼、信用卡號,也可以偽造頁面內容來釣魚。這就是為什麼主機權限的範圍如此重要——一個「能在所有網站上執行」的擴充功能,理論上能讀取你造訪的每一個頁面的內容。

背景服務工作程序與事件驅動

在 Manifest V2 時代,擴充功能可以有一個「持續存在」的背景頁面(Background Page),隨時待命處理事件。到了 Manifest V3,這個機制被「背景服務工作程序」(Background Service Worker)取代。服務工作程序是事件驅動的,沒有事件時會被瀏覽器終止,有事件時再被喚醒。

這項改變的出發點是資源效率:避免擴充功能長期佔用記憶體。但副作用也很明顯——某些需要長時間維持狀態的應用(例如即時通訊、複雜的網路攔截)在改寫上變得困難,開發者必須重新設計架構。這也是 Manifest V3 引發爭議的技術背景之一。

訊息傳遞與跨程序通訊

擴充功能的不同部分——彈出視窗(Popup)、選項頁面(Options Page)、內容腳本、背景服務工作程序——各自運行在不同環境中,彼此不能直接呼叫對方的函式。它們必須透過訊息傳遞(Message Passing)來溝通。

典型流程是:使用者在彈出視窗按下按鈕 → 彈出視窗傳訊息給背景服務工作程序 → 背景服務工作程序查詢瀏覽器 API → 再把結果傳回給內容腳本 → 內容腳本修改頁面。這整條鏈路牽涉多次跨程序通訊,任何一環延遲,使用者就會感覺到卡頓。

常見 API 分類與風險對照

為了讓讀者更具體理解「權限」的意義,下表整理了常見的擴充功能權限,以及它們代表的實際能力與風險等級。

權限類型

實際能力

風險等級

storage

存取擴充功能自己的本機儲存空間

activeTab

僅在使用者主動點擊時存取當前分頁

低至中

tabs

列出所有分頁的標題與網址

history

讀取完整瀏覽紀錄

中高

bookmarks

讀寫書籤內容

downloads

發起、監控、管理下載檔案

中高

webRequest(MV2)

檢視並修改所有網路請求

極高

declarativeNetRequest(MV3)

以規則宣告方式阻擋請求,看不到內容

主機權限:所有網站

在所有網頁注入內容腳本、讀取頁面資料

極高

看完這張表,應該不難理解為什麼資安專家會說:「安裝一個要求『所有網站』權限的擴充功能,等於把瀏覽器交給對方保管。」

四、為什麼需要擴充功能?瀏覽器廠商不做的那些事

談完技術原理,終於要回到本文的核心問題:既然擴充功能有這麼多風險,瀏覽器廠商為什麼還要開放這套機制?答案其實很現實,可以從三個角度來看。

標準化的取捨:通用不等於好用

瀏覽器是遵循網頁標準運作的軟體。HTML、CSS、JavaScript 的規格由 W3C、WHATWG、ECMAScript 等組織制定,過程漫長且需要各方共識。一個新功能從提案到成為標準,往往要好幾年,而且必須說服所有瀏覽器廠商採用。

問題是,使用者的需求遠比標準演進的速度快。有人想要更強的隱私保護、有人想要更順手的快捷操作、有人需要針對特定行業網站的特殊工具。這些需求太細碎、太小眾,不可能全部納入網頁標準,也不應該納入——否則瀏覽器會變得臃腫不堪。

擴充功能正好填補了這個空缺。它讓「長尾需求」可以在不影響標準的前提下被滿足。這是一種聰明的分工:核心保持穩定與通用,周邊保持開放與彈性。

長尾需求:從翻譯、密碼管理到閱讀模式

想像一下,如果沒有擴充功能,你今天習慣的很多體驗都不存在。網頁翻譯必須等網站自己支援多語系;密碼管理只能靠瀏覽器內建功能(而且跨裝置同步往往受限);廣告阻擋、深色模式、截圖工具、比價外掛、文法檢查、PDF 編輯、YouTube 播放速度控制、社群媒體的介面整理,全部都得仰賴各家網站自行提供。

這些功能單獨來看都不算「殺手級應用」,但累積起來,就是巨大的體驗差距。這也是為什麼很多使用者一旦習慣了某幾款擴充功能,就再也回不去「乾淨」的瀏覽器。

三大真實需求場景:隱私、效率、專業工作流

如果要把擴充功能的需求分類,大致可以歸納成三個主要場景。

第一是隱私與安全。廣告阻擋、追蹤器封鎖、HTTPS 強制升級、Cookie 管理、指紋防護,這些都屬於此類。這類擴充功能通常需要較高的權限(尤其是攔截網路請求),因此也是爭議最大的類別。

第二是效率與便利。密碼管理、分頁整理、書籤增強、快捷鍵自訂、表單自動填入、網頁截圖、剪貼簿管理,這些工具讓日常操作更順手。它們的權限需求通常較低,風險也較可控。

第三是專業工作流。網頁開發者的除錯工具、SEO 分析工具、設計師的取色工具、行銷人員的資料抓取工具、財務人員的試算表輔助工具,這些都是針對特定職業需求設計的。這類擴充功能的權限往往非常廣,因為它們需要深度介入頁面內容。

值得注意的是,這三類需求都有一個共同點:它們都是「個人化」的。瀏覽器廠商不可能針對每一位使用者的職業、習慣、偏好做出不同版本,但擴充功能可以。這就是開放生態的價值。

擴充功能也是瀏覽器廠商的策略工具

除了使用者需求,擴充功能對瀏覽器廠商本身也有策略意義。一個擁有豐富擴充功能生態的瀏覽器,會形成網路效應:使用者因為「我要用的工具只有這裡有」而選擇它,開發者因為「這裡使用者最多」而優先支援它。

這也解釋了為什麼各大瀏覽器都推出自己的擴充功能商店,並且在審核政策、API 設計、收益分潤上各有盤算。擴充功能不只是功能,它是一個平台,也是一個生態系的入口。

五、代價與風險:擴充功能不是免費的午餐

講到這裡,如果只談好處,那就太天真了。擴充功能確實帶來便利,但它同時也是瀏覽器安全模型裡最脆弱的一環。以下幾項風險,是每一位使用者都應該理解的。

權限過大:你按下的「允許」代表什麼

擴充功能在安裝時會顯示權限警告,但這些警告的文字通常很抽象。「讀取及變更你在所有網站上的資料」——這句話聽起來沒什麼,實際上卻代表這個擴充功能可以:看到你的網路銀行頁面內容、讀取你的電子郵件、記錄你輸入的每一個表單欄位、修改你看到的任何網頁。

更麻煩的是「權限蔓延」。很多擴充功能一開始只需要很小范围的權限,但隨著版本更新,開發者可能加入新功能而要求更大權限。有些瀏覽器會在更新時提示,有些則默默套用。使用者往往在不知不覺中,把原本謹慎給予的信任擴大到了危險的程度。

效能與記憶體成本

每一個擴充功能都會佔用資源。內容腳本要注入每一個符合條件的頁面;背景服務工作程序雖然會被休眠,但喚醒與初始化仍有成本;彈出視窗、選項頁面、儲存資料,全部都要吃記憶體。

如果你裝了二三十個擴充功能,瀏覽器啟動變慢、分頁切換卡頓、記憶體占用飆高,其實是很常見的現象。更別提某些寫得不好的擴充功能會使用計時器持續輪詢、監聽所有 DOM 變動,或在每個頁面上執行重量級腳本,導致的效能損耗可能遠超過你的想像。

實務上,瀏覽器內建的「工作管理員」(Task Manager)可以看到每個擴充功能的 CPU 與記憶體用量,這是排查效能問題時非常實用的工具。

供應鏈攻擊與惡意擴充

這是目前最嚴重的風險類別。擴充功能的生態有一個結構性弱點:使用者信任的是「開發者」,但擴充功能會自動更新,而開發者帳號可能被盜、專案可能被轉賣、程式碼可能被注入惡意邏輯。

過去幾年已經發生過多起真實案例:知名擴充功能被收購後,新東家偷偷加入追蹤或廣告注入功能;開發者帳號遭釣魚攻擊,攻擊者推送惡意更新給數百萬使用者;開源擴充功能因為依賴的第三方套件被投毒,導致整條供應鏈受污染。

這類攻擊最可怕的地方在於,它繞過了使用者的所有防備。你沒有點擊可疑連結、沒有下載奇怪檔案,只是因為幾個月前安裝了一個評價很好的工具,就在某次自動更新後被入侵。

Manifest V3 之爭:安全、隱私與廣告封鎖的三角習題

這幾年瀏覽器圈最大的爭議之一,就是 Chrome 從 Manifest V2 過渡到 Manifest V3。表面上的理由是安全與效能:限制擴充功能的網路攔截能力、改用宣告式規則、用服務工作程序取代常駐背景頁。支持者認為這能降低擴充功能被濫用的風險,也能減少資源消耗。

但反對者指出,新架構對廣告封鎖類擴充功能造成實質限制。過去可以即時分析請求、動態套用複雜過濾規則的能力被大幅削弱,某些進階功能難以實現。這引發了關於「瀏覽器廠商是否在保護自身廣告業務」的質疑,也讓不少使用者轉向仍支援完整攔截能力的瀏覽器。

無論立場如何,這場爭議清楚說明了一件事:擴充功能的能力邊界,最終是由瀏覽器廠商決定的。開放不等於無限,平台方永遠握有最終的規則制定權。

六、實務建議:如何安全又有效地使用擴充功能

理解了原理與風險之後,接下來要談的是實務。以下幾項原則,可以幫助你在享受便利的同時,把風險控制在合理範圍。

挑選原則:少、精、可信

第一,能少則少。先問自己:這個功能我真的會每天用嗎?如果只是偶爾需要,也許一次性的工具網站或瀏覽器內建功能就夠了。每少裝一個擴充功能,就少一個潛在的攻擊面。

第二,檢查權限。安裝前務必看一眼權限清單,問自己「這個功能真的需要這個權限嗎」。一個單純的截圖工具要求「讀取所有網站資料」並非要不得,但一個計算機擴充功能要求讀取你的瀏覽紀錄,就很可疑。

第三,優先選擇開源或知名開發者。開源不代表安全,但至少程式碼可被檢視,問題被發現的機率較高。知名開發者則通常有較完善的維護流程與資安意識。

第四,留意更新頻率與評價變化。一個長期不更新的擴充功能可能藏有未修補的漏洞;一個突然從低調變成大量推廣的擴充功能,則可能是被收購後商業化的訊號。

定期健檢清單

建議每三到六個月做一次擴充功能健檢,流程如下:

開啟擴充功能管理頁面,列出目前所有已安裝項目。

逐一檢查:最近三個月用過嗎?沒用到的直接移除。

檢視權限:是否有擴充功能在更新後取得了新權限?

查看評價與評論:最近是否有大量負評或資安相關留言?

使用瀏覽器內建工作管理員,找出高 CPU 或高記憶體的元凶。

確認自動更新狀態,必要時對高風險擴充功能關閉自動更新。

企業與家庭的情境

如果是企業環境,建議透過群組原則或企業管理主控台統一管理擴充功能,只允許白名單中的項目安裝。這不只是資安考量,也能避免員工安裝未經授權的工具而衍生法規或資料外洩問題。

如果是家庭環境,可以協助長輩與小孩安裝必要的擴充功能後,關閉「允許安裝其他擴充功能」的選項,減少誤裝惡意工具的機會。同時提醒他們:任何要求「輸入帳號密碼才能啟用」的擴充功能,都應該高度警覺。

七、結語:擴充功能是瀏覽器開放性的具體展現

回過頭來看,擴充功能之所以存在,是因為瀏覽器選擇了「開放」這條路。它承認自己不可能滿足所有人的所有需求,因此把一部分能力開放出來,讓第三方開發者補位。這套機制造就了今天豐富多元的上網體驗,也讓瀏覽器從一個「被動顯示網頁的工具」,變成一個「可以被使用者改造的個人工作平台」。

但開放從來不是沒有代價的。權限模型、沙箱隔離、商店審核、平台政策,這些機制都在試圖把風險控制在可接受的範圍內,卻永遠不可能做到零風險。最終的防線,仍然是使用者的判斷力。

所以,下次當你準備按下「加到 Chrome」或「新增至 Firefox」時,不妨多花三十秒,看一下它要求什麼權限、開發者是誰、評價如何。這三十秒,可能就是保護你帳號、資料與隱私的關鍵。

理解瀏覽器的原理,不是為了成為工程師,而是為了在下載與移除之間,做出更清醒的選擇。擴充功能讓瀏覽器變得更強大,而理解擴充功能,則讓你變得更安全。

```

🏠 返回首頁