构建 uMatrix 替代品

Hacker News Top 工具

摘要

本文探讨了在 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 技能🦎 如果这是个坏主意,或者你知道更好的解决方案,或者你想帮忙,请告诉我。

相似文章

如何在 Chrome 扩展中使用 Transformers.js

Hugging Face Blog

本文提供了一份技术指南,介绍如何将 Transformers.js 集成到基于 Manifest V3 的 Chrome 扩展中,详细阐述了后台 Service Worker 架构、模型缓存和 Agent 循环的设计。

CSP 白名单实验

Simon Willison's Blog

一个网页工具实验,展示了如何通过拦截 fetch 请求并提示用户将域名加入白名单,来处理沙箱 iframe 中的内容安全策略(CSP)错误。该工具通过 Codex 桌面应用使用 GPT-5.5 构建。

Claude Desktop 为 Chrome 及其他浏览器安装未记录的浏览器扩展

Lobsters Hottest

安全研究人员发现,Anthropic 的 Claude Desktop 应用在未经用户同意的情况下,秘密为基于 Chrome 的浏览器安装未记录的原生消息清单文件,创建了一个后门,允许浏览器扩展以系统权限级别执行代码。文章认为,这违反了电子隐私指令和计算机访问法律。