授权与合规声明本文全部操作对象均为自建隔离靶场本机容器或隔离虚拟机涉及安全测试的环节必须以取得合法授权为前提。未经授权的渗透测试违反《中华人民共和国网络安全法》与《刑法》相关条款须承担相应法律责任。本文只讲环境配置、版本对照与靶场隔离不含任何攻击步骤、利用载荷与绕过手法请勿将文中环境指向任何非自有系统。一、装完才想起来问它到底能看见什么1.1 三个问题其实是同一个问题你装过一个插件。可能是护眼的、翻译的、比价的也可能是某个网站提示你「安装助手体验更好」。装的时候屏幕上弹出一个框列了几条你扫了一眼点了确认。整个过程不到十秒。过一阵子你在别处看到有人讨论某类插件会收集浏览记录。你回头看自己装的那几个心里冒出三个问题它能不能看到我访问过的所有网站它能不能看到我在页面里填的东西它能不能动我的登录状态这三个问题听着是三件事往下追一层是同一件事这个插件在浏览器里被允许做什么。而这件事不由它自己说了算也不由它的介绍页面说了算由它安装包里的那份清单说了算。浏览器给你弹的那个框内容就是从这份清单里生成的。你看不懂那个框通常不是因为框写得太绕是因为没人告诉过你清单里的字段和「它能干什么」之间是怎么对上的。1.2 介绍页是宣传清单是边界先分清两种文本。一种是商店里的介绍一句话功能、几张截图、一段「我们重视您的隐私」。这类文本没有任何约束力。它写「只读取当前页面」代码里不做也没有任何机制会拦住它。另一种是安装包根目录下的清单文件。它由浏览器读取、由浏览器执行。清单里写了的浏览器才会放行清单里没写的插件调用对应接口时会被直接拒绝。所以判断一个插件能看见什么唯一可靠的入口是清单。这也是为什么装的时候会弹框浏览器把清单翻译成人话给你看然后把决定权交给你。你点了确认等于承认这份清单所描述的能力。1.3 两个字段先认脸清单里和权限相关的字段有两个名字很像作用完全不同字段官方说明原文它管的是permissions「包含来自已知字符串列表的项。更改可能会触发警告。」你能调用哪些浏览器接口host_permissions「包含一个或多个用于授予对一个或多个主机访问权限的匹配模式。更改可能会触发警告。」这些接口能在哪些网址上生效⚠️代码待验证permissions → 能调哪些接口 host_permissions → 这些接口在哪些网址上生效 两者取交集 → 它在这个网址上实际能做的事两个字段都提到「更改可能会触发警告」——这句话很重要它说明权限不是装完就固定不变的插件升级时如果新增了权限浏览器会再提示你一次。所以「我装的时候它没要那么多」不构成安全依据你要看的是它现在的清单。本节的引文出自 Chrome for Developers 的《声明权限》中文页面页面口径以截至 2026-10-24 抓取到的版本为准。二、两类权限钥匙串和门2.1 API 权限钥匙串上给了哪几把permissions里的每一项基本对应一类浏览器接口。写tabs它就能调标签页相关的一批方法写cookies它就能调 Cookie 相关的接口写webRequest它就能挂网络请求的监听。这里有个容易误解的地方接口权限只管「能不能调这个方法」不管「这个方法作用在哪个网站上」。一个只有cookies的插件能调 Cookie 接口但它在你的网银页面上读不到东西——因为它没有被允许碰那个网址。这就引出第二类权限。2.2 主机权限这把钥匙能开哪几扇门host_permissions里放的是匹配模式也就是网址的匹配规则。https://example.com/*是某站的整站all_urls是所有支持的协议下的所有地址。它决定上一条里那些接口的作用范围。官方文档对两者的关系写得很清楚「主机权限允许扩展程序与网址的匹配模式进行互动。除了自身的 API 权限之外某些 Chrome API 还需要主机权限」。注意最后半句——某些 API 还需要主机权限。这句话的意思是光有 API 权限不够还要有对应网址的主机权限那个接口在那些页面上才真正可用。反过来光有主机权限没有 API 权限你也没法调那个接口。两个条件是与的关系。所以「这个插件能看见什么」这句话准确的问法是它申请了哪些 API 权限以及这些权限被限定在哪些网址上。2.3 一个常见的错判很多人看清单只看permissions这一栏看到里面没有tabs就断定「它读不了我的网址」。这个推断不成立原因在第三章第三节会讲——有些动作不需要主机权限有些能力可以由别的权限间接提供。也就是说清单是一个需要整体读的结构不是逐项对照的账本。反过来也有一种错判看到host_permissions里写着all_urls就认为「它把我的所有数据都拿走了」。也不对。主机权限给的是「接触的资格」具体接触了什么、传没传出去清单不告诉你那属于代码行为。清单能回答的是能力上限不是行为记录。这个区分贯穿全文请先记住。三、主机权限换来的六件事3.1 官方列举的六类动作官方文档在讲主机权限时列举了需要它的六类动作。这份列举值得逐条看因为它就是「主机权限能换来什么」的官方答案序动作对普通用户意味着什么1Service Worker 里发fetch()它能代你向别的网站发起请求并读到返回内容2用tabs读敏感标签页属性网址、标题、favIconUrl它知道你打开了哪些页面、页面叫什么3以编程方式注入内容脚本它能在页面里运行自己的代码4用webRequest监控和控制网络请求它能看到这个页面往外发了什么5用cookies访问 Cookie它可能碰到你的会话凭证6用declarativeNetRequest重定向和修改请求它能改变请求的去向和内容六条里第 1、6 两条离日常感受远一点先放着。剩下四条是初学者最容易有体感的逐个说。3.2 读网址和标题为什么「只是一个网址」也敏感一个网址里能装的信息比你想的多。搜索词在查询串里后台的页面路径在路径段里有些站点把一次性凭证直接放在地址上。标题同理邮件标题、订单标题、文档标题都可能出现在标签页标题里。所以「它只读网址不读页面内容」这句话安慰作用有限。把一周的网址和标题按时间排出来足以画出你的作息、你在哪些系统里干活、你最近在查什么。这也是为什么这一类权限单独被点名为「敏感标签页属性」。3.3 注入脚本真正意义上的「看得见页面」「以编程方式注入内容脚本」是六条里最需要留意的一条因为它跨过了界线前面几条看到的是关于页面的信息这一条看到的是页面本身。脚本注入进去之后页面里的 DOM 对它就是可读的——包括你填在输入框里的内容、渲染出来的列表、以及页面上任何一处文字。注意这里说的是能力不是行为。绝大多数正常插件用它来做页面增强高亮、批注、取词翻译。同一把钥匙能开的门用途可以很正也可以不正清单不区分这两种用途。你要判断的是这个功能值不值得给它这个能力。3.4 看网络请求和读 Cookie看请求这一条webRequest的意义在于页面里发生的事很多不体现在 DOM 上而体现在它往外发了什么。挂上这个权限请求的地址、时机、内容都在视野里。读 Cookie 这一条cookies更直接。会话凭证通常存在 Cookie 里拿到它就等于拿到「你处于登录状态」这个事实。这也是为什么在权限讨论里cookies和host_permissions一起出现时值得多看一眼它申请的范围——是全站还是几个具体域名。Cookie 本身的属性作用域、有效期、标记位是另一个话题本文不展开。3.5 三个「不需要主机权限」的例外官方文档同时给了三个例外这三点是理解清单的关键例外说明持tabs权限时用chrome.tabs访问标签页有了 API 权限一部分标签页操作不再额外要主机权限用chrome.debugger调试类接口走的是另一套授权清单里已声明的内容脚本声明式注入在安装时就被一并授权了这三条例外合起来说明一件事能力的来源不止一处。所以读清单的正确姿势不是「这栏没有就安全」而是「这几栏加起来它到底拿到了什么」。这也是本文反复强调「整体读」的原因。四、activeTab把授权推迟到你点的那一下4.1 什么叫「用户调用」activeTab是清单里一个很特别的权限。官方的定义是「activeTab权限可让扩展程序在用户调用扩展程序例如点击其操作时临时访问当前活跃的标签页。」关键词有两个调用和临时。先说调用。官方给了四种被认可的手势手势具体动作执行操作点工具栏上那个图标执行上下文菜单项右键菜单里选它那一项通过 Commands API 执行键盘快捷键你按了它注册的快捷键接受来自多功能框 API 的建议你在地址栏里选了它给的候选四种的共同点都必须是你做的动作。插件不能自己「调用自己」也不能靠定时器、靠页面加载事件来获得这份授权。这一条是整个机制的支点——授权的发起者从「安装时的你」变成了「此刻的你」。4.2 临时到底多临时拿到 activeTab 之后它能做三件事同时声明scripting时可以调scripting.insertCSS()或scripting.executeScript()通过返回tabs.Tab对象的接口拿到当前标签页的网址、标题和 favicon用webRequest拦截这个标签页发往主框架来源的请求。失效的规则写得很具体「对标签页的访问权限在用户位于相应网页上时有效并在用户离开或关闭标签页时被撤消。」也就是说你切到别的标签页、或者把这个标签页关掉授权立刻结束。文档还给了一个更细的例子在example.com上点的跳到example.com/foo仍然保留换到另一个域就撤销。这条规则的实用含义是同一个网站上你点几次它就获得几次授权你不点它一次都没有。这不是一个「装了就有」的权限。4.3 分水岭为什么它不弹警告这是全文最该记住的一句官方表述「此方法可替代all_urls的许多用途但在安装期间不显示警告消息」。配套的另一半是如果不使用 activeTab想达到类似效果就得申请「对每个网站的完全持久访问权限」。于是安装时的那个框成了两种授权模式的分水岭对比项all_urls这类主机权限activeTab授权时机安装时一次性给每次你点它时给有效范围所有匹配的网址当前这一个标签页有效时长持久直到你撤销或卸载直到你离开或关闭该页安装时弹警告会不显示警告消息代价无对用户而言什么都不用做每次都要你主动点一下看懂这张表你就明白那个常被误传的说法为什么错「装的时候没弹权限警告说明它很干净。」不弹警告有两种可能一种是它确实什么敏感权限都没要另一种是它用的是 activeTab 这类「按需授权」的模式能力一点不少只是把授权拆成了很多次每次都由你亲手触发。警告框的有无反映的是授权的时机不是能力的大小。五、进不去的地方和要单独授的地方5.1chrome://一律进不去官方文档在讲受限页面时只给了一句「无法访问受限页面例如chrome://页面。」这一句挡住的范围比看上去大。浏览器的设置页、扩展管理页、下载列表、历史记录都在这一类地址下。也就是说一个插件无论申请了多大的主机权限它都碰不到「浏览器自己」的这些界面。这条对你的实际用处是当你怀疑某个插件在改浏览器设置时可以先想一下——它做不到直接改chrome://下的页面。真出了变化多半是走了设置类接口而不是「在你的设置页里动手」。这两者的区别决定了你该去哪个地方查。5.2file://和无痕要单独授本地文件和隐私窗口是另外两扇门默认是关着的。官方原文「如果您的扩展程序需要在file://网址上运行或在无痕模式下运行用户必须在扩展程序的详情页面上授予该扩展程序访问权限」。这里有个细节值得记住这两项不是装的时候给的是要你事后到详情页里单独打开。而且插件自己可以检测你有没有开——文档给了两个接口extension.isAllowedIncognitoAccess()和isAllowedFileSchemeAccess()。所以「我装了插件但无痕窗口是干净的」这个印象需要修正默认情况下插件在无痕里不生效这是一条保护但一旦你在详情页里给它开了它在无痕里和普通窗口里没有区别。无痕模式保护的是本地记录不是「插件看不见」。5.3 一个三层过滤的判断顺序拿到一个陌生插件判断「它在某个页面上能不能动」可以按这个顺序过层问什么结论第一层这个地址是不是chrome://之类的受限页是 → 一律进不去后面不用问第二层是不是file://本地文件是 → 要你在详情页单独开过才行第三层当前窗口是不是无痕是 → 同样要单独开过才行第四层它申请的是全站主机权限还是 activeTab全站 → 直接可用activeTab → 要你点一下四层过完答案基本就定了。这个顺序的好处是前三层是硬边界跟插件写得好不好无关先排除掉能省很多事。⚠️代码待验证受限页 chrome:// → 停一律进不去 file:// 本地文件 → 先看详情页有没有单独开过 无痕窗口 → 同样先看有没有单独开过 以上都不是 → 再看它是全站权限还是 activeTab受限页面这一节我整理成了一页对照表哪些页面进不去、哪些要单独授、到哪儿去开六、自己怎么核装前、装后、按需6.1 装前把清单读成一句话清单不长权限相关的就那两三行。下面两段是读清单的示意用来说明字段长什么样不是在教你写插件也没有在真实插件上跑过。第一段是「全站放行」的形态⚠️代码待验证{permissions:[tabs,cookies,scripting],host_permissions:[all_urls]}读成一句话它能读所有网站的网址和标题能碰所有网站的 Cookie能在所有网站里跑脚本。三个「所有」叠在一起这就不算「网页增强」而是「全局可见」。第二段是「按需授权」的形态⚠️代码待验证{permissions:[activeTab,scripting]}读成一句话它只在你点它的时候对当前这一个页面动手。没有host_permissions没有cookies能力被压到了很小。把这两段摆在一起你就有了判断标准清单里出现多少个「所有」决定了你该用多严的眼光看它。一个取词翻译插件要all_urls可能说得通一个只在一个网站上用的插件要all_urls就值得问一句为什么。6.2 装后去详情页看那一栏装完之后浏览器给了你一个复核入口扩展的详情页里有一栏专门列它现在能访问哪些网站。中文界面里这一栏通常叫「网站访问权限」具体措辞可能随版本不同以你屏幕上看到的为准截至 2026-10-24 的常见写法如此。这一栏比安装时那个框更有用原因有两个一是它是当前状态插件升级加过权限的话这里会变二是它通常带一个下拉能让你把「在所有网站上」改成「在特定网站上」或者「点击时」。所以装完不要就完了。花二十秒打开这一栏看一眼写的是「在所有网站上」还是别的。这一步的成本极低收益是把「我以为」换成「我看到了」。6.3 按需开启而不是全站放行官方文档在讲最小权限时给了两句很实在的话「如果扩展程序受到恶意软件的入侵权限有助于限制损害。」以及「请考虑使用可选权限以便用户在知情的情况下控制对资源和数据的访问权限」。第一句是理由权限的作用不是防止插件作恶而是限定它作恶时的上限。一个只有当前页权限的插件被接管损失是「这一页」一个有全站权限的插件被接管损失是「你打开过的所有页面」。同一份恶意代码装在不同权限壳子里后果差好几个量级。第二句是做法可选权限的设计意图就是把「现在就要全部」改成「用到了再要」。它的清单形态大致是这样⚠️代码待验证{permissions:[activeTab],optional_host_permissions:[https://example.com/*]}这表示装的时候只要当前页能力某个具体域名的全站权限留到你真正需要时再开。对应到你的操作上就是那个下拉框——能选「点击时」就别选「在所有网站上」能限定到具体域名就别放开全站。第三句是我加的定期回头看一眼。装的时候判断过一次不代表半年后还成立。插件会升级清单会变你访问的网站也会变。七、三个误读和本文不写的东西7.1 三个常见误读误读一没弹权限警告说明它很干净。第四章说过activeTab 这类模式在安装期间不显示警告消息。不弹只说明它没有申请「安装时就要报备」的那类权限不说明它没有能力。误读二开源、评分高、下载多就等于可信。这三项说的是「代码是否公开」「别人用得爽不爽」都和「它申请了什么权限」是两个维度。一个完全开源、口碑很好的插件照样可以申请all_urls加cookies反过来一个没人听说过的小插件也可能只要 activeTab。权限是事实口碑是评价别用评价代替事实。误读三我不用它的时候它就停着。这要分两种模式说。activeTab 模式下确实如此你不点它就没有授权。但主机权限是持久的——官方在对比时用的词是「对每个网站的完全持久访问权限」持久两个字是重点授权一次之后不需要你每次同意。所以「我平时不点它」这句话只对按需授权的插件成立。7.2 警告文案我核不到就不写这一节是自我限制请当成正文的一部分读。安装时会弹出一个框里面逐条写着每个权限对应的人话说明。这些说明的原文在另一份权限列表文档里本批没有抓取核对。所以本文不引用任何一条警告文案也不给你「看到这句话就要警惕」之类的对照表——那样写出来的东西看着有用但每一条都可能是错的而读者无从分辨。能确定的只有一件事安装时会弹一份权限清单内容由清单字段生成。你要做的是把那份清单当成需要读的文本而不是当成需要尽快点掉的弹窗。逐字文案的核对留到有出处的时候再写。7.3 本文的边界这篇只做一件事教你把清单读成「它能看见什么」然后判断要不要装。它不写怎么做一个能读取页面内容的插件——那是另一个方向的知识和「判断要不要装」是相反的两件事。你学会了怎么造不代表你学会了怎么防而绝大多数读者需要的是后者。另外三个相邻话题本文也刻意避开了浏览器本地存储怎么用、Cookie 的各项属性和作用域、以及内容安全策略与响应头。这三个都是独立的大题目混进来会把「读清单」这条主线冲散。这一节列的误读加上前面几章的自查顺序我做成了一张单页清单附表 A本文引用事实与官方出处对照表编号事实摘要出处本文位置EXT-1permissions「包含来自已知字符串列表的项。更改可能会触发警告。」Chrome for Developers《声明权限》1.3、2.1EXT-2host_permissions「包含一个或多个用于授予对一个或多个主机访问权限的匹配模式。」同上1.3、2.2EXT-3「主机权限允许扩展程序与网址的匹配模式进行互动」且「某些 Chrome API 还需要主机权限」同上2.2、2.3EXT-4需要主机权限的六类动作fetch、tabs 敏感属性、注入内容脚本、webRequest、cookies、declarativeNetRequest同上3.1–3.4EXT-5三个例外持tabs时用chrome.tabs、chrome.debugger、清单已声明的内容脚本同上3.5EXT-6activeTab 定义「在用户调用扩展程序时临时访问当前活跃的标签页」《activeTab 权限》4.1EXT-7四种触发手势执行操作、上下文菜单项、Commands 快捷键、多功能框建议同上4.1EXT-8activeTab 下能做三件事scripting注入、读 url/title/favicon、webRequest 拦截主框架请求同上4.2EXT-9撤销规则「在用户位于相应网页上时有效并在用户离开或关闭标签页时被撤消」同源子路径保留同上4.2EXT-10可替代all_urls的许多用途「但在安装期间不显示警告消息」同上4.3、7.1EXT-11「无法访问受限页面例如chrome://页面。」同上5.1EXT-12file://与无痕要在详情页单独授予检测接口isAllowedIncognitoAccess()、isAllowedFileSchemeAccess()同上5.2EXT-13最小权限表述「权限有助于限制损害」「请考虑使用可选权限」同上6.3EXT-14待验证各权限对应的具体警告文案本批未抓权限列表页—7.2不引任何一条原文EXT-15本文纪律不写「做一个插件去读别人的内容」本批纪律7.3补充详情页栏目名称「网站访问权限」的具体措辞随版本可能变化未逐字核对官方文案6.2已标以屏幕为准待验证本文两段 JSON 为读清单的示意未在真实插件上运行—6.1代码待验证附表 B术语速查表术语含义清单manifest插件根目录下由浏览器读取的配置文件声明名称、入口与权限API 权限permissions里的项决定能调用哪些浏览器接口主机权限host_permissions里的项决定上述接口能在哪些网址上生效匹配模式描述网址范围的规则如https://example.com/*或all_urlsall_urls覆盖所有支持协议的匹配模式属于持久、全站的授权activeTab只在用户调用时临时授予当前标签页访问权的权限用户调用由你亲手触发的动作点图标、选菜单、按快捷键、用地址栏建议内容脚本运行在网页上下文里的脚本能读写该页面的 DOMService Worker插件的后台运行环境可代你发起跨站请求webRequest观察并控制网络请求的接口需主机权限配合declarativeNetRequest按规则重定向或改写请求的接口同样依赖主机权限受限页面插件一律进不去的地址如chrome://开头的页面可选权限不在安装时一并索取、由用户后续按需开启的权限无痕访问需用户在详情页单独授予插件才能在隐私窗口里运行写在最后这篇用到的资料写这篇文章时我把浏览器里装过的插件一个个点开详情页把「网站访问权限」那一栏抄下来对了一遍顺手也整理了几份配套的东西靶场环境对照表DVWA、upload-labs 在 Windows / macOS / Linux 三平台的可行性与推荐路径Web 安全学习路线图从基础打牢到安全管理四个阶段各学什么常用靶场清单每个靶场练什么、适合哪个阶段资料是我自己整理的放在下面这个码上扫码即可获取添加时备注「靶场」优先通过。拿到之后建议先看环境对照表那一份把「这个插件申请了几个所有」当成装任何扩展前的第一道门。
阅读完成 · 觉得有帮助?