iT邦幫忙

1

從零打造輔大課表神器:Chrome Extension 開發實戰 30 天 - Day 4

  • 分享至 

  • xImage
  •  

Day 4:Chrome Extension 理論篇 - manifest.json 權限設定概念

🎯 系列目標:用 30 天時間,從零開始打造一個專屬輔大學生的課表生成 Chrome 擴充功能

👨‍💻 作者:輔大智慧資安 412580084

📅 Day 4:Chrome Extension 理論篇 - manifest.json 權限設定概念

🔐 權限系統的重要性

昨天我們實作了 manifest.json 的基本資訊,今天我們要深入了解 Chrome Extension 中最重要的安全機制——權限系統

🤔 為什麼需要權限?

想像一下,如果沒有權限控制:

  • 😱 任何擴充功能都可以讀取您的所有網頁資料
  • 😨 惡意擴充功能可以盜取您的個人資訊
  • 🚀 擴充功能可以任意修改網頁內容
  • 📁 可以在您不知情的情況下下載檔案

權限系統的作用
✅ 保護使用者隱私和安全
✅ 確保擴充功能只能做它聲稱的事情
✅ 讓使用者明確知道擴充功能會做什麼

🛡️ Chrome Extension 安全原則

Chrome Extension 遵循「最小權限原則」(Principle of Least Privilege):

  1. 預設拒絕:擴充功能預設無法存取任何資源
  2. 明確申請:必須在 manifest.json 中明確聲明需要的權限
  3. 使用者同意:安裝時使用者必須同意授予權限
  4. 權限最小化:只申請必要的權限,不要過度申請

📋 權限類型總覽

Chrome Extension 的權限分為兩大類:

1. 🌐 一般權限 (permissions)

這些權限控制擴充功能可以使用哪些 Chrome API:

"permissions": [
  "activeTab",
  "scripting", 
  "tabs",
  "storage",
  "downloads",
  "notifications"
]

2. 🏠 主機權限 (host_permissions)

這些權限控制擴充功能可以存取哪些網站:

"host_permissions": [
  "https://portal.fju.edu.tw/*",
  "http://estu.fju.edu.tw/*"
]

🔍 一般權限詳解

讓我們深入了解輔大課表生成器需要的各種權限:

activeTab - 當前分頁權限

用途:允許在使用者主動觸發時存取當前分頁
場景:使用者點擊擴充功能圖示時,讀取課表網頁內容

優點

  • ✅ 安全性高,只能存取使用者當前瀏覽的分頁
  • ✅ 不需要申請 host_permissions
  • ✅ 使用者信任度高

限制

  • ❌ 只能在使用者主動觸發時使用
  • ❌ 無法在背景自動執行

scripting - 腳本注入權限

用途:允許向網頁注入 JavaScript 代碼
場景:在課表頁面注入代碼來解析課表資料

API 功能

  • 執行 JavaScript 代碼
  • 注入 CSS 樣式
  • 操作 DOM 元素

tabs - 分頁管理權限

用途:讀取和操作瀏覽器分頁資訊
場景:獲取課表頁面的 URL,判斷是否為輔大網站

可以做的事

  • 讀取分頁標題和 URL
  • 開啟新分頁
  • 切換分頁
  • 監聽分頁狀態變化

注意:不能讀取分頁內容,需要搭配其他權限

storage - 資料存儲權限

用途:在本地存儲擴充功能的設定和資料
場景:保存使用者的課表設定、快取課表資料

存儲類型

  • sync:同步到 Google 帳戶(跨裝置)
  • local:僅本地存儲
  • session:瀏覽器會話期間

downloads - 檔案下載權限

用途:允許下載檔案到使用者電腦
場景:將課表匯出為 PDF 或 CSV 檔案

功能

  • 觸發檔案下載
  • 監聽下載進度
  • 管理下載項目

🌐 主機權限詳解

主機權限控制擴充功能可以存取哪些網站的內容。

URL 模式語法

"host_permissions": [
  "https://portal.fju.edu.tw/*",     // 輔大門戶網站的所有頁面
  "http://estu.fju.edu.tw/*",        // 學生選課系統的所有頁面
  "https://*.fju.edu.tw/*"           // 輔大所有子網域
]

權限範圍設計原則

正確設計

"host_permissions": [
  "https://portal.fju.edu.tw/student/*",  // 只存取學生相關頁面
  "http://estu.fju.edu.tw/course/*"       // 只存取課程相關頁面
]

過度申請(避免):

"host_permissions": [
  "https://*/*",  // 存取所有 HTTPS 網站
  "http://*/*"    // 存取所有 HTTP 網站
]

⚖️ 權限設計最佳實踐

1. 最小權限原則

只申請必要權限

  • ✅ 分析功能需求,列出最小權限集合
  • ❌ 不要「以防萬一」申請額外權限

2. 權限替代方案

優先使用限制性較強的權限

  • 優先:activeTab > host_permissions
  • 優先:具體網址 > 萬用字符
  • 優先:子路徑 > 整個網站

🔐 安全性考量

權限濫用風險

高風險權限

  • <all_urls>:存取所有網站
  • tabs:可能洩露瀏覽歷史
  • cookies:可能洩露登入狀態

防護措施

  • 使用最小權限集合
  • 定期審查權限需求
  • 透明化權限使用目的

Content Security Policy (CSP)

權限系統搭配 CSP 提供多層防護:

  • 防止惡意腳本注入
  • 限制資源載入來源
  • 防止 XSS 攻擊

📊 輔大課表生成器權限分析

基於我們的功能需求,分析所需權限:

核心功能對應權限

功能 權限 理由
讀取課表頁面 activeTab 只在使用者點擊時讀取
解析課表資料 scripting 需要注入解析腳本
保存設定 storage 本地存儲使用者偏好
匯出課表 downloads 下載 png 檔案
存取輔大網站 host_permissions 讀取特定網站內容

權限最佳化建議

{
  "permissions": ["activeTab", "scripting", "storage", "downloads"],
  "host_permissions": [
    "https://portal.fju.edu.tw/student/*",
    "http://estu.fju.edu.tw/course/*"
  ]
}

🎯 下集預告:Day 5 - manifest.json 權限設定(實作)🛠️


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言