构建 uMatrix 替代品
摘要
本文探讨了在 Chrome Manifest V3 下替换已弃用的 uMatrix 浏览器扩展的选项,提出了一种使用 declarativeNetRequest 和内容安全策略来控制网站权限和子资源请求的解决方案。
暂无内容
查看缓存全文
缓存时间: 2026/05/15 21:34
# 替换 uMatrix
来源:https://lock.cmpxchg8b.com/umatrix.html
- [引言](#introduction)
- [方案](#options) – [declarativeNetRequest](#declarativenetrequest) – [策略](#policies)
- [概要](#outline)
## 引言
曾经有一款极好的 Chrome 扩展叫 uMatrix(https://github.com/gorhill/uMatrix),由 uBlock Origin 的开发者 Raymond Hill 编写。uMatrix 提供了一种直观的方式来控制站点权限和子资源请求。
它长这样:
> uMatrix1
> uMatrix3uMatrix2uMatrix3
除非你是个技术宅,否则你可能不会关心它——但它能限制第三方提供子资源请求,并控制对框架、脚本、视频、字体等功能的访问。部分功能你可以通过浏览器设置手动完成,但 uMatrix 让这一切变得快速又简单。这意味着原本繁琐复杂的上网方式变得简单了。好吧,不是简单,而是更简单*一点*。
总之,我很享受那些额外用来控制网站权限的调节开关。
uMatrix 的功能——或多或少——是 uBlock Origin(https://github.com/gorhill/uBlock)功能的一个子集,所以与其同时维护两个扩展,Hill 废弃了 uMatrix,并鼓励用户迁移到 uBO。
这对我来说其实还行——uBO 加入了一些我很喜欢的功能(例如,[装饰性过滤器](https://github.com/gorhill/ublock/wiki/Procedural-cosmetic-filters)),而且如果你不介意手动编写更复杂的规则,它基本上能完成 uMatrix 能做的所有事。
坏消息是 uBO 是一个[旧版 MV2 扩展](https://developer.chrome.com/docs/extensions/develop/migrate/what-is-mv3),而其继任者——[uBO Lite](https://chromewebstore.google.com/detail/ublock-origin-lite/ddkjiahejlhfcafbddmgiahcphecmpfh?hl=en)——移除了这一功能。
我真的不想放弃这个功能——有什么解决方案吗?
## 方案
我的问题是:uMatrix 在 mv3 下是否还有可能实现?
### declarativeNetRequest
这里 mv2 和 mv3 的主要区别在于,无法再通过执行回调来阻断请求(即所谓的“阻塞”型 web 请求)。
如果你想拦截一个请求,现在必须[声明式地](https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest)完成。这意味着你不能再对每一个请求都运行 JavaScript,而是必须预先声明你想要应用哪些操作。
你可能已经听说过有争议的一点:在声明式中你无法*完全*实现回调里能做的一切,因此能力被削弱了。从技术上讲这是真的,但从实践来看,这些规则足够灵活,能满足我所有需求。
### 策略
Web 已经有一套系统来控制功能和子资源,叫做[内容安全策略(CSP)](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP)。
一个明显的设计方案是使用 `declarativeNetRequest` 来添加我们自己的 `Content-Security-Policy`,然后浏览器会替我们完成所有工作。我们只需要提供一个方便的界面来管理它。
好,那我们要如何提供一个允许和拒绝的子资源列表呢?当你使用 uMatrix 时,它会显示一个子资源类型和来源的列表,让你手动批准或拒绝。
这是 uMatrix 做得好的核心功能,因此必不可少。嗯,我认为 CSP 已经提供了解决方案!其中有一个 `report-to` 指令,用于指示浏览器将任何安全违规行为发送到报告端点。
我们只需要启用这个功能,添加另一条 `declarativeNetRequest` 规则来捕获这些报告,然后根据浏览器发送的报告填充列表。又一个任务成功外包了😂
当然,这需要一些管道工作,但各个部件都已就位,在我看来完全可行。
## 概要
既然我们已经大致勾勒出它*可能*如何工作……接下来只需要有人写一个概念验证。好吧,我来试试。
这是第一个尝试:[matrix3](https://github.com/taviso/matrix3)
> matrix3
> matrix3matrix3matrix3
它明显还处于原型阶段,但基本能工作了。我想我应该在博客上发一篇文章,看看有没有人感兴趣!
代码非常少——不需要构建或依赖,只需 `git clone`,然后在 Chrome 中“加载已解压的扩展”即可。
我不是 Web 开发者,显然也完全没有 UX 技能🦎 如果这是个坏主意,或者你知道更好的解决方案,或者你想帮忙,请告诉我。
相似文章
Google Chrome 正在关闭让旧版广告拦截器继续运行的漏洞
Google Chrome 将在 150 和 151 版本中移除对 Manifest V2 扩展的剩余支持,从而有效终结让旧版广告拦截器(如 uBlock Origin)继续运行的变通方法。
Google Chrome 更新将堵上广告拦截器的大门
Google Chrome 向 Manifest V3 的过渡消除了 Manifest V2 扩展的最后漏洞,实质上将在2026年6月前终止对 uBlock Origin 等流行广告拦截器的支持。
Google Chrome 正在封杀所有 uBlock Origin 的绕过方法,Edge 和 Opera 将紧随其后
Google Chrome 正在推行 Manifest V3,该版本禁用了 uBlock Origin 等广告屏蔽器的绕过方法,预计 Microsoft Edge 和 Opera 也将实施类似的限制。
Microsoft Edge 即将像 Chrome 一样禁用旧版广告拦截器
Microsoft Edge 正在效仿 Chrome,停止对 Manifest V2 扩展的支持,从本月开始逐步禁用 uBlock Origin 等旧版广告拦截器,并在 2026 年底前将消费者用户过渡到 MV3,企业版将于 2027 年初弃用。
如何在 Chrome 扩展中使用 Transformers.js
本文提供了一份技术指南,介绍如何将 Transformers.js 集成到基于 Manifest V3 的 Chrome 扩展中,详细阐述了后台 Service Worker 架构、模型缓存和 Agent 循环的设计。