安全審查能力
| 領域 | 這幫你驗證什麼 |
|---|---|
| 權限範圍 | 申請的能力是最小且刻意的 |
| Content script 安全 | 頁面情境行為避免不安全的注入模式 |
| WAR(web-accessible resources)暴露 | 只有必要資產對外可讀 |
| 訊息邊界 | 擴充功能會驗證特權操作並檢查寄送者 |
| 發佈衛生 | 持續整合(CI)與相依套件檢查能及早抓到回歸 |
Manifest 與權限
- 只申請你需要的權限。
- 除非必要,避免廣泛的 host 權限。
- 非核心能力優先使用 optional permissions。
- 功能變更後重新檢查
web_accessible_resources範圍。
Content scripts
- 預設使用 isolated world(沙箱執行情境),除非你確實需要存取頁面 JavaScript 的 MAIN world。
- 把選擇器與 DOM 修改限制在已知目標。
- 對不受信任的頁面資料先消毒再進行繪製或儲存。
- 避免把可執行字串注入頁面情境。
Web-accessible resources
- 保持 WAR 條目明確且最小。
- 避免萬用字元
resources: ["*"]模式。 - 把
matches限制在必要的網域。 - 用執行階段 URL 輔助函式(
runtime.getURL)存取資產。
訊息傳遞與資料流
- 處理前驗證訊息 payload 的形狀。
- 對特權操作驗證寄送者情境。
- 避免直接把特權操作暴露給頁面腳本。
- 為 content/background 通訊保留邊界模組。
建置與發佈衛生
- 在 CI 中執行 lint、型別檢查與測試。
- 檢查正式 bundle 輸出是否有意料外的產物。
- 保持相依套件更新並移除未使用的套件。
- 輪替機密,避免把敏感值放進客戶端可見的環境變數。
常見高風險反模式
- 與功能無直接關聯卻使用廣泛萬用字元的
host_permissions web_accessible_resources用廣泛 glob 對應<all_urls>- 訊息處理器在沒有寄送者或 schema 檢查的情況下信任 payload
- 在可以使用 isolated world 時仍使用 MAIN-world 腳本
發佈前快速檢查
- 權限審查
- WAR 審查
- Content script world 審查
- 訊息驗證審查
- 在目標瀏覽器矩陣上 CI 通過
下一步
- 檢視 web-accessible resources。
- 檢視 疑難排解。

