ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

读 uBlock Origin 的 CHANGELOG:从 1.54 到 1.73 的过滤引擎演进路线图

读 uBlock Origin 的 CHANGELOG:从 1.54 到 1.73 的过滤引擎演进路线图 读 uBlock Origin 的 CHANGELOG从 1.54 到 1.73 的过滤引擎演进路线图【免费下载链接】uBlockuBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean.项目地址: https://gitcode.com/GitHub_Trending/ub/uBlockCHANGELOG.md 是 uBlock Origin 仓库中一份按版本倒序组织的变更日志覆盖 1.54.0 至 1.73.0 的全部发布外加文件顶部尚未归入版本号的开发中条目。读完本文你能掌握三件事uBlock Origin 静态网络过滤引擎在近两年新增的每个关键过滤选项urlskip、ipaddress、requestheader、top、message等及其在源码中的落地位置scriptlet脚本注入框架中trusted-前缀机制的演进脉络以及差分更新differential update这一影响所有用户带宽成本的功能是如何引入并逐步完善的。一、CHANGELOG 的体例与阅读方式当前仓库中的 CHANGELOG.md 遵循固定的书写约定按语义化版本倒序排列每个版本以# x.y.z作为 H1 标题新版本在上、旧版本在下版本之间以----------分隔线隔开形成清晰的版本边界每个版本下列出若干条目条目为提交摘要 提交链接链接指向上游提交历史本文为自包含不再复述外链1.63.0 及之后的版本普遍带有## Fixes / changes二级小节1.54.0–1.59.0 则按功能性质分为## New与## Fixes / changes社区贡献者署名非维护者的提交以(by xxx)标注例如env_brave预处理令牌、set-cookie的checked/unchecked取值均由ryanbr贡献文件顶部的无版本条目1.73.0 之上还有一段未归入版本号的条目如修复非受信来源脚本注入、从 AdGuard shims 导入google-ima-dai、用 filterslists-KO 替换 List-KR、移除cap_user_stylesheet支持等代表正在开发中的下一个版本的候选变更。这种体例的价值在于它把引擎能力的每一次增量新过滤选项、新 scriptlet、新预处理令牌、新 shim都压缩为一行可检索的记录是追踪 uBlock Origin 语法能力演进的权威索引。二、版本时间线总览1.54.0 → 1.73.0下表从 CHANGELOG 各版本条目中提炼主线可作为快速定位能力引入时点的索引版本代表性变更摘自 CHANGELOG1.54.0过滤列表差分更新落地replace响应体替换选项Firefoxurltransform语法对齐replace1.55.0urltransform更名为uritransform差分更新扩展到导入列表DOM 检查器隔离1.56.0uritransform可处理 URL 的 hash 段修复csp/permissions的浏览历史泄露风险1.57.0缓存存储重新设计My filters 复选框badfilter移除受信来源要求1.58.0日志器新增 console 面板selfie 加载 trie 缓冲区时的校验和验证1.59.0:matches-prop()伪 CSS 算子set-cookie新增essential/nonessential取值1.60.0新增ipaddress与urlskip两个静态网络过滤选项dnsResolveEnabled高级设置noop 重定向资源1.61.0urlskip持续增强-blocked、-uricomponent、base64 解码、参数名查询、正则提取步骤AdGuard$domain/.../语法支持1.62.0urlskip新增-safebase64指令EasyList{ remove: true }美化过滤语法scriptlet 拆分到独立文件1.63.0URL 缓冲区从 2048 提升到 8192按祖先上下文来源注入 scriptletFirefox 最低版本相关兼容调整1.64.0jsonl/json-edit系列 scriptlettrusted-prevent-fetch扩展过滤目标新增 path1.65.0message网络过滤选项strict-block 消息header语法与 DNR 规则兼容1.66.0ipaddress支持 strict-blockuritransform兼容 DNR 语法csp/permissions可用于 object 类型1.67.0JSONPath 正则测试removeparam多同名参数修复1.68.0–1.69.0prevent-dialogadthriveshimFirefox 最低版本提升至 1151.70.0–1.71.0top、requestheader过滤选项freeze-element-property、prevent-navigationscriptlet1.72.0JSONPath 引入v2:前缀RFC9535、正则选择器edit-this-object/edit-element-object系列 scriptletISO-8859-2 别名1.73.0日志器保留空白字符prevent-clipboard-writeJSONPath RFC9535 合规度提升每个版本内部都是若干 Fix 若干 Feature 大量 scriptlet Improve的混合其中Improve 某 scriptlet类条目占据了相当大比例——这本身就说明 scriptlet 是 uBlock Origin 迭代频率最高的子系统下文第三节详解。三、过滤引擎语法演进从 CHANGELOG 条目到源码证据3.1 新增的静态网络过滤选项CHANGELOG 中最值得逐条展开的是网络过滤语法的扩展。这些条目在源码中都能找到对应实现可以交叉验证urlskip1.60.0 引入1.61.0–1.62.0 快速完善允许把本应重定向到本地 noop 资源的请求改写成跳过特定组件后的真实 URL。CHANGELOG 记录了它的完整成长史1.60.0 New static network filter optionurlskip1.61.0 依次加入-blocked指令、-uricomponent转换、base64 解码、正则提取步骤、查询参数名查询且明确重定向只允许到https:1.62.0 又加入-safebase64指令。源码层面选项名在 src/js/static-filtering-parser.js 中注册第 286 行[ urlskip, NODE_TYPE_NET_OPTION_NAME_URLSKIP ]且第 3213 行声明为mustAssign转换逻辑集中在独立的 src/js/urlskip.js 中1.69.0 的 Improveurlskipimplementation 条目正对应该文件的重构。ipaddress1.60.0 引入CHANGELOG 记录了 1.60.0 先新增选项、随后加入lan/loopback取值1.66.0 又支持作为 strict-block 的触发来源。源码中该选项在 src/js/static-filtering-parser.js 第 257 行注册、第 3184 行声明mustAssign匹配实现在 src/js/static-net-filtering.js 中FilterIPAddress.fid与选项值的绑定处。requestheader1.71.0新增按请求头过滤的选项在 src/js/static-filtering-parser.js 第 278 行可见注册项第 3205 行声明mustAssign: true。top1.71.0用于限定顶层文档场景的匹配选项CHANGELOG 原文为 Add support for network filter optiontop。replace1.54.0 引入Firefox 专属起步响应体替换选项。CHANGELOG 1.54.0 条目明确注明 Firefox only becausefilterResponseData即依赖 Firefox 专有的webRequest.filterResponseDataAPI随后 1.55.0 扩展application/x-javascript、1.60.0 扩展application/dashxml、1.66.4 允许replace使用通用例外规则$~genericblock语义。1.65.0 的 Add support for network filter optionmessage 则让被 strict-block 的页面能显示自定义消息配套的 Complete support for reporting strict-block messages 使 strict-block 页面完整呈现message与reason信息1.66.0 进一步改进。uritransform1.54.0 引入为urltransform1.55.0 更名URL 变换选项。演进链清晰1.54.0 Implement network filter optionreplace 同期让urltransform复用replace语法 → 1.55.0 更名为uritransform→ 1.56.0 允许处理 URL 的 hash 段、修复多重uritransform作用于同一请求的问题 → 1.66.0 Improve compatibility ofuritransformwith DNR syntax向 Declarative Net Request 语法靠拢。3.2 JSONPath 子系统的 RFC 化1.66.0–1.73.0CHANGELOG 显示 JSONPath 从实验特性走向标准合规的完整路径1.66.0 加入选择根节点做增改与字符串值内模式替换1.67.0 Add ability to test against regex in JSONPath expressions1.68.0 修复正则匹配 bug1.72.0 是关键节点——引入v2:前缀以启用更高的 RFC9535 合规度同时加入正则选择器、双引号名称支持与量词属性存在性测试1.73.0 继续 Increase RFC9535 compliance 并明确 dot notation before bracket notation is not valid 的解析约束。当前仓库中该子系统的实现位于 src/js/jsonpath.js解析器测试在 tools/jsonpath-tests.js 与 tools/jsonpath-tests.html可直接运行验证v2:前缀行为。3.3 预处理与列表生态调整CHANGELOG 还记录了列表生态的多次调整帮助读者理解过滤列表来源变化背后的决策1.66.0 移除 CERT.PLs Warning List1.67.0 又 Add back a uBO-specific version同时 1.66.0 移除 AdGuard Tracking Protection 并加入实验过滤列表1.58.0 用 AdGuard Dutch 替换 EasyDutch顶部开发中条目用 filterslists-KO 替换 List-KR韩语列表来源调整1.69.0 由ryanbr加入 Anti-AI Suggestions 列表1.61.0 Add ability to parse Adguards[$domain/.../]regex-based modifier——即对 AdGuard 正则域名修饰符的语法兼容这是列表作者跨工具复用的关键。四、scriptlet 框架的演进trusted-前缀与安全边界CHANGELOG 中最高频的条目模式是 Improvexxxscriptlet 与 Addtrusted-xxxscriptlet两者共同勾勒出 uBlock Origin 的 JS 注入子系统1.trusted-前缀的引入与收紧。trusted-scriptlet 只有来自受信来源uBlock 官方列表的过滤规则才能使用这是隔离第三方列表作者风险的核心机制。CHANGELOG 记录了该机制的建立过程1.57.0 Remove obsolete trusted directives、1.59.0 加入trusted-suppress-native-method、1.61.0 加入trusted-override-element-method/trusted-prevent-dom-bypass/trusted-prevent-xhr、1.61.0 Addtrusted-set-attrscriptlet以及最重要的安全修正——1.68.0 Fix custom prefixes unduly assigning trust to external lists自定义前缀曾错误地给外部列表赋予信任。顶部的开发中条目 Fix possible injection of scriptlets requiring trust from non-trusted sources 说明该边界至今仍在被加固。当前仓库中 scriptlet 的实现按功能拆分为多个文件位于 src/js/resources/ 目录例如 prevent-fetch.js、replace-argument.js、cookie.jsset-cookie/trusted-set-cookie的实现、scriptlets.js注册与分发核心——这正对应 1.62.0 Keep moving related scriptlets into separate files 的重构条目。2. 响应体改造类 scriptlet 的代际演进。CHANGELOG 可以串出一条清晰的响应改写能力链1.59.0 改进json-prune相关 scriptlet → 1.64.0 引入json-edit套件与jsonl-prune-xhr-response/jsonl-prune-fetch-response→ 1.65.0 加入[trusted-]edit-inbound-object→ 1.72.0 引入edit-this-object/trusted-edit-this-object、edit-element-object、edit-object-on-[getter|setter]→ 1.73.0 改进json-edit。这些名称在 src/js/resources/json-edit.js 与 src/js/resources/json-prune.js 中均可找到对应实现。3. 防绕过类 scriptlet 的积累。prevent-家族是另一条主线prevent-fetch从 1.54.0 起被反复改进至少 6 次CHANGELOG 中有大量 Improveprevent-fetchscriptlet 条目、prevent-xhr/trusted-prevent-xhr1.61.0、prevent-dialog1.69.0、prevent-navigation1.71.0、prevent-clipboard-write1.73.0 新增并在开发中继续改进、prevent-innerHTML1.63.2等。每个条目背后都是对页面如何绕过被禁用的原生 API这一攻防面的封堵。4. 注入时机的精细控制。1.63.0 Add ability to inject scriptlets according to origin of ancestor contexts 允许按祖先帧的来源决定是否注入实现位于 src/js/resources/run-at.js 等运行时基础设施中1.64.0 Mind potential race condition when dynamically registering scriptlets 则修复了动态注册的竞态。五、差分更新一项影响所有用户的带宽优化CHANGELOG 1.54.0 是唯一带有## New独立小节并配长文说明的版本主题是过滤列表的差分更新differential update。其原文要点值得完整继承动机uBlock Origin 不希望按带宽占用挤进最热门项目榜单原文引用了 jsDelivr 公开统计作为背景预期收益差分更新预计同时降低请求数与带宽用量——更新列表时只传输补丁而非全量文本使用前提重要限制要享受更短的自动更新周期必须让 uBlock 自动更新过滤列表手动强制更新会使差分更新失效直到下一次自动更新为止。源码层面该功能由 src/js/diff-updater.js 实现并在后续版本中持续完善1.55.0 将差分更新扩展到导入列表、支持差分友好的 updater-link、支持all列表令牌1.57.0 Make asset updater compatible with non-persistent background page1.58.0 加入 Add a console pane to the logger便于观察更新日志1.64.0 Fetch diff patches from reliable servers only补丁只从可靠服务器获取1.69.0 Improveurlskipimplementation 同期的 Fix merging of uncommitted filters 也属于更新链路的一部分。1.63.0 还有 Use onmessage/postMessage instead of BroadcastChannel in diff updater 的实现细节调整1.61.0 Mind that BroadcastChannel constructor can throw in Firefox 则体现了跨浏览器兼容成本。六、安全修复条目值得单独关注的几项CHANGELOG 中若干条目直接关系到第三方列表作者能否被信任对使用自定义列表的用户尤其重要1.56.0 两项历史泄露修复Fix potential exfiltration of browsing history by a rogue list author throughpermissions 与 ...throughcsp由社区用户报告——即恶意列表作者可能借助csp/permissions选项间接读取浏览历史1.68.0Fix custom prefixes unduly assigning trust to external lists——受信边界修复见第四节1.69.0Fix regression inprevent-fetchscriptlet 与1.62.0Fix regression intrusted-replace-argument——scriptlet 的回归修复1.66.4Fix potential infinite loop when scanning for$anchor——解析器死循环修复顶部开发中条目Fix possible injection of scriptlets requiring trust from non-trusted sources——受信 scriptlet 注入边界的再次加固。这些条目说明 uBlock Origin 的威胁模型把过滤列表作者视为半可信输入trusted-前缀、csp/permissions的收敛、差分补丁来源白名单都是同一模型的产物。七、平台与工程侧变更CHANGELOG 也记录了不可忽视的平台兼容性约束与工程重构Firefox 最低版本1.69.0 将 Firefox 最低要求版本提升到115原条目带[firefox]前缀CHANGELOG 用方括号前缀标注平台特定变更如 1.71.0 的[chromium]前缀表示 Chromium 平台的.svg资源被归类为 image 类型序列化与缓存1.57.0 Redesign cache storage缓存存储重设计src/js/cachestorage.js1.57.2 即修复该设计引入的 stray lists 回归1.58.0 Add checksum validation when loading trie buffers in selfie1.59.0 Fix bad serialization of Date objects1.61.2 Better handle unexpected conditions when deserializing——s14e 序列化格式src/js/s14e-serializer.js的健壮性是被反复打磨的UI 侧1.58.0 日志器新增 console 面板1.56.0 脚本参数在活跃行中视觉分离1.57.0 Support maximizing editor to viewport size、Add advanced setting to force popup panel orientation1.73.0 [logger] Preserve whitespace characters高级设置项CHANGELOG 中新增的高级设置可在 src/js/background.js 的默认值定义中验证——1.60.0 的dnsResolveEnabled第 70 行默认true与 1.57.0 的requestStatsDisabled第 83 行默认false控制 src/js/storage.js 中的请求统计持久化构建与工具链1.55.0 Support non-default sticky lists、Refactoring: Replace DOM events with broadcast channels对应 src/js/broadcast.js。八、如何把 CHANGELOG 用作开发索引对想深入 uBlock Origin 的开发者这份日志的实际用法建议如下按语法选项反查版本想知道某选项何时可用直接在 CHANGELOG.md 中搜索选项名如urlskip、ipaddress、requestheader、top、message即可定位引入版本与后续修复版本版本 → 源码路径对照本文第三节给出的对照关系选项 → src/js/static-filtering-parser.js 的选项注册表适用于所有网络过滤选项mustAssign: true的声明第 3205–3213 行一带表示该选项必须带赋值平台差异注意带[chromium]/[firefox]前缀的条目是平台特定变更例如replace在 1.54.0 引入时仅限 Firefox依赖filterResponseData阅读时不可把它外推为双平台能力适用前提本文所有结论以当前仓库内容为准对应 1.54.0 至 1.73.0 及文件顶部的开发中条目仓库内 platform/mv3/ 等目录表明当前代码同时面向 MV3 构建tools/make-mv3.sh可构建但 CHANGELOG 本身不标注 MV3 里程碑涉及 MV3 的能力边界需另行查阅对应 manifest 与文档。小结CHANGELOG.md 表面上只是一份提交清单实际上它是 uBlock Origin 过滤语言的能力地图replace→uritransform→urlskip/ipaddress勾勒出网络层从阻断走向改写的路线trusted-scriptlet 家族的膨胀勾勒出注入层信任边界的收紧差分更新与序列化健壮性条目则勾勒出分发层成本优化的持续投入。结合 src/js/static-filtering-parser.js、src/js/resources/ 与 src/js/diff-updater.js 中的源码证据这份日志足以作为理解该项目架构演进的单一可信入口。【免费下载链接】uBlockuBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean.项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表