iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0
佛心分享-SideProject30

從零開始改善工作之 Chrome Extension: MR 通知文字小工具系列 第 28

Day 28:安全性考量 — 什麼不該放進 Extension

  • 分享至 

  • xImage
  •  

在開發的時候,可以操作的功能總是讓人腦洞大開想多做很多,但在安全性這塊也特別容易遺忘。
接下來我們就來聊聊哪些內容不該放進 extension,以及該如何避免常見漏洞吧。

為什麼要重視安全性?

  • Extension 拿到權限就等於擁有瀏覽器很多功能,一旦被惡意利用可能危害使用者資料。
  • Chrome Web Store 有審查機制,若 extension 異常或被發現濫權,可能被下架。
  • 使用者對於 extension 要給予信任,一旦收集、不當存取或亂用資料,就會失掉信心。

哪些東西「不該放進」Extension?

以下是幾個需要特別避免或謹慎處理的項目:

機密憑證/私密金鑰 (API key / token /密碼)

  • 不要把後端 API key、私密 token、或用戶密碼硬寫在 extension 程式中。
  • 若真要使用,應該由後端 server 中轉呼叫,不讓 extension 端直接存取。
  • 若必須在 extension 本地存儲 token,也要採取加密與存取控制。
  • 使用 optional permissions 讓使用者在第一次開啟 extension 時自行輸入

過度寬泛的權限 / Host 範圍

  • 在 manifest.json 中,不要濫用 *://*/* 這種 host permission,除非必要。盡量只給自己需要的 host domain,例如 https://gitlab.com/*
  • 權限最小化 (least privilege) 是安全設計原則之一。

遠端載入或執行腳本 (Remote Code Execution)

  • 在 Manifest V3 已經禁止從遠端載入 JavaScript。這正是為了避免惡意腳本注入
  • 也不要在 extension 中使用 eval()new Function()、或把 user input 當作程式碼執行。

不經過驗證或 sanitization 的輸入 / HTML 渲染

  • 若從 user template 或網頁中抓字串要插入到 DOM,要避免直接用 innerHTML,以防 XSS。
  • 使用 textContent 或安全的 sanitized HTML 插入。
  • 若有 HTML 格式需求(如 ClipboardItem),要做白名單清理或使用信任化工具(如 DOMPurify)。

過度依賴 storage / 全域變數

  • 不要在 window 上放太多全域變數,可能被其他 extension 或網頁腳本干擾。
  • 避免儲存過多敏感資料在 chrome.storage,尤其是 chrome.storage.sync(資料可同步到雲端)。
  • 若要存放敏感資料,考慮加密與存取控制。

洩漏使用者隱私資料 / 瀏覽歷史 / Cookies

  • 不要隨意讀寫 cookies、history,除非功能強烈需要。這些權限尤其敏感。
  • 若使用者授權,該操作要清楚告知理由。
  • 保持 extension 的隱私政策與使用者期望一致。

重點

“你能做的事很多,但你應該做最必要的事。”
這就是安全設計的哲學:功能 + 最小權限 + 不風險擴散。

參考來源


上一篇
Day 27:效能思考 — Content Script 何時注入最好?
下一篇
Day 29:延伸應用 — 如何打包與上架(唯一需要資金的單元)
系列文
從零開始改善工作之 Chrome Extension: MR 通知文字小工具30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言