浏览器扩展可能拥有访问你所有网页数据的权限。了解如何评估扩展的安全性,保护你的浏览隐私。
是的,如果你授予了足够宽泛的权限,浏览器扩展几乎可以读取并修改你在网上的一切操作。一个拥有“访问你在所有网站上的全部数据”权限的扩展,可以看到你访问的页面、你在表单中输入的文字、你的 Cookie,以及你的浏览历史。绝大多数扩展是诚实的,但真正关键的是权限模型:最安全的做法是只安装少量扩展、授予尽可能窄的访问权限,并定期进行审查。
扩展究竟能做什么
当你安装一个扩展时,你授予了它在清单(manifest)中声明的一组权限。这些权限决定了扩展能看到和修改你浏览行为的程度。很多人会在没看清提示的情况下直接点击“添加到浏览器”,所以有必要先弄清这些权限类别到底意味着什么。
一个拥有宽泛主机权限的扩展,通常可以:
- 读取页面内容——你打开的每个页面的完整文字、链接和结构
- 读取并填写表单字段——包括搜索框、登录表单和支付字段
- 访问 Cookie——其中可能包含让你保持登录状态的会话令牌
- 读取你的浏览历史——你访问过的站点和网址列表
- 注入脚本——在其他网站内部运行它自己的 JavaScript
- 发起网络请求——把它收集到的数据发送到远程服务器
关键在于:扩展是带着你的活动会话,运行在你的浏览器内部的。它不是一个受同源策略约束的远程网站,而是一个被信任的“内部人员”。这正是为什么一个微小的权限失误,可能带来巨大的隐私影响。这种清单层面的权限授予,与网站自身可以查询的页面级 navigator.permissions.query() API 是完全不同、宽泛得多的概念——参见 Permissions API 指纹了解那个独立、更窄的机制如何运作。
用通俗语言理解权限模型
现代浏览器(Chrome 的 Manifest V3、Firefox 的 WebExtensions)通过一个清单文件来描述扩展的影响范围。下面是一个简化的示例,展示你在安装时其实是在批准的权限部分:
{
"name": "示例扩展",
"permissions": ["cookies", "tabs", "storage"],
"host_permissions": ["<all_urls>"],
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
]
}
其中 <all_urls> 这个值最值得警惕。它意味着扩展可以在你访问的每一个网站上运行它的内容脚本、读取这些页面并对其进行操作。相比之下,限定在单一域名上的扩展只能触及那一个网站。
主机权限与 <all_urls>
主机权限定义了扩展可以在哪些站点上运行。像 https://*.example.com/* 这样的模式将其限制在一个服务内;而 <all_urls> 或 *://*/* 则授予了对整个网络的访问权限。宽泛的主机权限,是决定一个扩展隐私影响范围的最大单一因素。
activeTab 与点击时访问
activeTab 权限要安全得多:它仅在你点击扩展图标时授予对当前标签页的临时访问权限,而当你离开该页面后,权限即被收回。基于 activeTab 构建的扩展无法在后台悄悄地监视你。如果浏览器提供这一选项,把站点访问设为“点击时运行”,就能把宽泛的扩展变成按需运行的扩展。
内容脚本
内容脚本是扩展注入到你所访问页面中的代码。它可以读取 DOM、观察你输入的内容,并改写页面。内容脚本既是正当功能(价格比较、语法检查)的实现机制,也是滥用式数据收集的手段。它的 matches 模式的覆盖范围,决定了它能看到你多大比例的浏览行为。
好扩展也会“变坏”
风险并不仅来自一开始就心怀恶意的扩展。还有几条不那么明显的路径,会通向同样的结果。
- **被弃用的扩展。**开发者停止维护某个扩展,代码仍然能用,但安全漏洞无人修补,这个扩展就变成了一个带着宽泛权限、陈旧失修的入口。
- **被收购后用于牟利的扩展。**一个广受信任的热门扩展被卖给新所有者,对方悄悄推送一次更新,注入广告、联盟链接或追踪代码。你的浏览器会自动更新它,而你多年前授予的权限依然有效。
- **供应链被攻击。**某个扩展正当地打包了第三方库或依赖远程配置;一旦该依赖或服务器被攻陷,恶意载荷就会送达所有安装了该扩展的用户。
真正危险的时刻,往往不是安装那天,而是几个月后那次悄无声息的自动更新——它依托的,正是你早已批准并遗忘的权限。
这就是为什么“我安装时它还是好好的”并不能作为保证。宽泛的权限是一种长期存在的隐患,可能在未来任何一次更新中被激活。
扩展与指纹识别
除了直接读取你的数据,扩展还会让你更容易被跨站追踪。你所安装的那一组特定扩展,以及它们对页面所做的改动,都可能成为你浏览器指纹的一部分。
它发生的几种方式:
- **可被探测的网页可访问资源。**许多扩展会暴露内部文件,网站可以探测这些文件,从而判断你运行了哪些扩展。
- **DOM 修改。**注入元素或改写页面的扩展,会留下一致且可被检测的痕迹,追踪者能够读取它们。
- **行为副作用。**拦截器和隐私工具会改变网络与渲染行为,而这些改变——颇为讽刺地——反而可以被测量。
由此产生一个悖论:一个小众的隐私扩展,可能让你的浏览器变得更容易识别,而非更难,因为很少有其他用户拥有完全相同的配置。想了解你整体的指纹状况,可阅读我们的浏览器指纹完全指南;想对比不同的加固方案,可参阅我们的隐私工具对比。
安装前如何评估一个扩展
对待每个扩展,都应像授予某个应用访问你账户的权限一样谨慎,因为从功能上看,你做的事情与此非常接近。请逐项核对下面这份清单。
| 信号 | 风险较低 | 风险较高 |
|---|---|---|
| 权限范围 | activeTab、单一主机模式 | <all_urls>、宽泛主机权限 |
| 发布者 | 知名公司或老牌开发者 | 匿名或全新账户 |
| 用户量与评价 | 安装量大、评价稳定 | 用户极少,或评价突然激增 |
| 最后更新时间 | 近期且定期更新 | 多年未动(已弃用) |
| 源代码 | 开源、可审计 | 闭源、混淆、仅有压缩代码 |
| 数据处理方式 | 清晰、最小化的隐私说明 | 隐私政策含糊或干脆没有 |
没有任何单一信号能下定论,但它们的组合会讲出一个故事。一个限定为 activeTab、由活跃开发者维护的开源扩展,与一个闭源、<all_urls>、三年前最后一次更新的扩展,是截然不同的两回事。
你也可以检查自己浏览器中当前正在运行的扩展。BrowserInsight 的插件与扩展检测工具能帮你查看可被检测到的扩展,并理解它们的影响范围;而指纹检测工具则会展示你的整体配置如何影响可追踪性。
降低风险的实用步骤
你不必彻底放弃扩展——你需要的是有意识地去管理它们。
1. 遵循最小权限原则
优先选择请求权限最窄的扩展。如果两个扩展能完成同样的工作,就选限定为 activeTab 或特定主机的那个,而不是要求访问所有网站的那个。
2. 使用“点击时”访问
对于支持该选项的扩展,把站点访问设为“点击时运行”,让它们只在你主动调用时才运行。这能在不损失功能的前提下,消除大部分后台数据收集。
3. 定期审查
每年一到两次,打开浏览器的扩展管理页面,删除所有你已不再使用的扩展。每个已安装的扩展都是攻击面;一个用不上的扩展,就是纯粹的负担。
4. 留意更新与所有权变更
如果一个原本简单的扩展突然开始请求新的、更宽泛的权限,要保持警惕——浏览器通常会提示你。权限的突然扩张,可能意味着所有权或意图发生了变化。
5. 在适当场景下使用企业策略
在受管理的环境中,管理员可以通过浏览器策略将经过批准的扩展加入白名单,并屏蔽其余所有扩展。这是大规模场景下最可靠的控制手段,彻底免去了逐个用户自行判断的环节。
常见问题
浏览器扩展能读取我的密码吗?
如果一个扩展有权在你登录的网站上运行,并有权读取表单字段,那么它在技术上就能在密码被提交之前,观察到你输入的内容,包括密码。这正是为什么向不受信任的扩展授予宽泛主机权限非常危险。对于运行在页面上的内容脚本而言,密码字段并不会自动成为禁区。
来自官方商店的扩展一定安全吗?
不一定。官方商店会进行自动化审核和部分人工审核,能过滤掉大量纯粹的恶意软件,但审核并不完美。被弃用的扩展、所有权转移,以及引入追踪的更新,都可能蒙混过关。出现在商店里能降低风险,但无法消除风险。
隐私扩展会让我更难被追踪吗?
有时是,有时恰恰相反。内容拦截器可以阻止许多追踪器,但你所运行的那一组与众不同的扩展,以及它们对页面所做的改动,反而可能增加你的指纹特征。请尽量选择被广泛使用、维护良好的工具,而非小众冷僻的工具,并通过指纹检测来验证最终的净效果。
装多少扩展算太多?
并没有一个固定的数字,但每个扩展都会增加权限、攻击面和潜在的指纹信号。一个不错的原则是:只保留你正在积极使用的扩展,优先选择窄权限,其余一律删除。少而精的扩展,胜过一长串被遗忘的扩展。


