浏览器调教指南 - 插件篇

引言

浏览器调教指南 - Firefox 篇#插件 提到的插件檄文先行,浏览器调教指南 - Chromium 篇 也已经到位。 这两篇里我没有涉及 Firefox Container 或者通用的多 profile 方案,因为这本质上并不算「调教」, 影响不到默认的设置,只能说是「隔离」,而且是最基础也最废物的本机环境隔离。

由于我启用 private browsing,退出后删除除了网站设置的全部数据,虚拟机也是 immutable disk, 一直对多 profile 方案不屑一顾,写本文搜索各种无用列表的时候才想起来还有这种方法。 简单提一句,不再多说。

在前文注释我曾提到,本篇会喷各种插件推荐,并且给出更加「原生」或可靠的方案。

不需要的

ℹ️ Note

对本节中各种插件的反面态度,前提是完全掌握『浏览器调教指南』,高屋建瓴。 走路都还走不顺,就想着跑马拉松,甚至盲目修炼水上漂,大概率会死得很彻底😜。 哪怕这么说,整个列表的个人色彩恐怕还是非常浓厚,我只能先送上四个字 求同存异 党同伐异

不知道会列多少,形式还是采取简单的 bullet list:

  1. HTTPS Everywhere,步入 6202 年,哪还有多少 HTTP 网站,Tor Browser 都不再预装,普通人完全可以 HTTPS-only。如果出于特殊需要不得不访问,建议单独配置白名单,忽略警告。
  2. NoScript
    • 不需要 NoScript 并不意味着时刻启用 JavaScript,事实上你完全可以用 uBlock Origin 的 hard mode 替换 NoScript。如果你连初次配置都不想,无所谓 JavaScript,那也一样可以用 ubo 的 medium modeeasy mode
    • 为什么 ubo 是更好的选择?因为它的颗粒度更细,使用 NoScript 你无法只允许 a.blahblah.xyz 而保持对于 blahblah.xyz 的封锁,允许图片、视频、JavaScript 等操作也要比 ubo 繁琐。uMatrix 曾经是另一个替代方案,但停更多年,还是 ubo 活得最好
  3. Canvas Blocker,Firefox 自带这一功能(RFP, Resist Fingerprinting),Chromium 禁用 WebGL 即可。相信我,一个需要启用 WebGL 的网站可能依然是个正常网站(比如 itch.io 的很多 Unity for Web 游戏),手动放行即可,但要禁用 RFP 才能访问的网站,你大概率也不需要。
  4. WebRTC Leak Prevent,Firefox/Chromium 均可配置(about:config v.s. chrome://flags ),不需要插件。有的人可能反驳说浏览器实现不够彻底,但 IP 是不会泄漏的,如果你的 threat model 已经到了考虑浏览器指纹 1 的程度,建议直接 Tor Browser 或者 I2P
  5. Cookie AutoDelete
    • 都不需要 policy-templates,设置里就能配置自动删除,美中不足就是不支持 Cookie AutoDelete 那种定时删除,但我本来就设置的默认启用 private browsing + 退出删除所有 cookies,毫无影响
    • 说到 cookies,我更推荐通过 cookie-editor 管理,可以只允许插件获取单个网站的 cookies。本来也没有多少账号需要保持登录状态,在小部分网站允许 cookies 权限之后导出即可,登录状态掉了重新登录 renew 即可
    • 引申开来,你也可以在虚拟机 A 登录并导出 cookies,然后在虚拟机 B 导入 2
      • 如此一来,连输入环节都省了,虚拟机 B 根本不可能在浏览器层面获取对应账号的密码
      • 密码管理器 + 插件毕竟需要传输密码到浏览器,还需要将数据库导入虚拟机 B,平添风险
      • 何况有的网站不允许这么操作,只能自动填充,这安全性只能说比手动输入强一点🤏
  6. Click & Clean,同上,设置即可配置,装个插件纯属多此一举
  7. Proxy Switchy Omega
    • 是的,99% 的情况下你不需要额外的代理配置插件,现有的 GeoIP/GeoSite 库和路由规则足以涵盖绝大部分使用场景,仅需几行 DIY 规则,这东西作用非常局限,我都想不通这大规模滥用的局面是怎么造成的
    • 先不说 Edge 商店满天飞的带毒版本,Chromium 也已经停止支持 ManifestV2 扩展,基于 MV3 的 fork ZeroOmega 也是 bug 一大堆
    • 如果你还坚持嘴硬保持怀疑,有个简单粗暴的判断方法:Kali, WireShark, Fiddler, PAC, privoxy, Selenium, Playwright 如果你一个都不认识,那就肯定不需要🤷
  8. Tampermonkey,violentmonkey,你不需要闭源插件
  9. 搜索引擎插件,通过 policy-templates 同样可以设置,不要相信搜索引擎说的「更安全、更多功能」,锁定默认搜索引擎和所谓「优化」的本质和我前文的调教手段殊途同归,大可不必
  10. Flash 插件,Pale Moon + CleanFlashinstaller + clean-flash-builds 默秒全,详见 我的 Windows 软件之道#浏览器
  11. 大部分下载插件(下载辅助、资源嗅探等等)
    • 首先是 HLS/M3U8 类型的视频流,毕竟这种可能最难下载 3,用户脚本注入能解决 99% 的网站,剩下那 1%,我相信下载插件也搞不定,需要手动逆向。
    • 其次,对于常见的图片/视频站,已经有足够成熟的命令行解决方案,浏览器插件完全是更弱的下级替代。gallery-dl, yt-dlpyou-get 足以解决大部分网站,如果不行,就配上登录账号的 cookies。
    • 再者,对于上面三驾马车也搞不定的网站,一般就是套用各种模板的视频/图包站,网页资源的链接基本都包含在源码中,写个爬虫解析网页批量抓取也不是什么难事。
    • 如果连爬虫都懒得写,也有更简单的方法:W3M + wget
      1. w3m $URL
      2. Shift + L(显示网页上的全部链接),另存为文件,比如 links.txt
      3. 手动筛选一下需要下载的链接,如果 URL 使用相对路径,三句话让 LLM 写个拼接脚本
      4. wget -i links.txt
      5. 结束
  12. Stylus 和所有特定网站的定制化插件,它能做到的,用户脚本和 Firefox userContent.css 一样能做到,它做不到的,policy-templates 和 Firefox userChrome.css 还是能做到
  13. 「工具箱」类型的插件 4
    • 这些工具完全可以从浏览器中剥离出来独立运行,何必安装插件徒增风险,现成脚本或者自行部署的开源替代,一抓一大把。
    • 何况很多「工具箱」、「脚手架」确实不干净,源码一目了然却盗取 cookies 的用户脚本都一大把,权限更大的插件更是劣迹斑斑。
  14. 所有需要登录才能使用的插件 5,原因同上
  15. 密码生成器(不是管理器配套插件),没审查过代码你压根不知道这个「随机」有多随机,更别提人家会不会顺手把 URL 和账号密码传到自家服务器,这种活还是交给离线的密码管理器 6 才靠谱
  16. 单独的两步验证(2FA)插件 7
    • 不局限于浏览器插件,我认为 2FA 本身就应该和密码管理放在一个篮子里。如果密码管理器连 2FA 功能都不提供,还是早点弃用比较好
    • 这点非常有争议,但个人是这么认为的,稍微解释一下
      • 理论上,通过分离账号密码和 2FA,可以保证 邪恶的 Eve 在获取你的账号密码之后不能直接登录,相当于上了额外一道锁
      • 事实上,更有可能发生的是 单点故障,密码管理器或 2FA 应用,任何一个炸了都会导致你失去开启 2FA 的全部账号 8
      • 而且借助密码管理器 + 浏览器插件,你也可以自动填充 2FA,操作步骤和分离是差不多的
  17. 所有的比价插件,脚本不香吗?
  18. 所有的钱包插件,把金融账号/虚拟货币交给一天成千上万个网络请求,一年几十个 0day 的浏览器?
  19. 所有的同步插件,我不需要连备份/恢复功能都没有的插件,而设置全都可以定制化,密码使用密码管理器,同步和账号功能毫无存在价值
  20. 所有的标签、主页、启动器插件,如果你有标签管理障碍,先解决的应该是自己而不是标签🙄
  21. 插件管理插件,如果完全遵守本文,符合要求,功能还不重合的插件只有个位数,管理也无从说起
  22. 所有的书签插件
    • 浏览器书签只能在 GUI 使用,对于活在命令行的人,buku 要更合适
    • 哪怕不使用命令行,一个简单的 bookmarks.html 也能秒杀所有书签插件……

插件标准

上面的列表七七八八已经说得差不多了,这里就随便列几点,我也不一定严格遵守,最终还是得看实用性:

  • 开源,最好是自由软件
  • 用户足够多,这样才能及时发现潜在问题,具体数目得根据插件的使用场景判断,小众领域 100 stars 就非常之多,而烂大街的广告过滤,还是得 uBlock Origin 这种数量级才算得上可靠
  • 维护超过 2 年,很多插件更新不到三个版本就弃坑,没有长期支持,出了 bug 也没人管,新兴领域这点会适当宽容
  • 提供备份/恢复配置的功能,WebDAV 同步等等只能算 bonus
  • 无广告,并且不需要账号即可体验完整功能

我使用的插件

浏览器调教指南」系列三篇文章透露了不少,其实都能推测出来:

  • Cookie-Editor,跨 VM 登录
  • Dark Reader,其实可以用用户脚本或 CSS 解决,但是我懒
  • KeePassXC-Browser,只在「登录机」使用,其他机器导入 cookie 即可
  • LocalCDN,源自停更多年的 Decentraleyes,用本地资源替换 CDN,减少访问请求加快网页加载,这款插件也是假冒伪劣高发区,安装时注意辨别
  • uBlock Origin
  • Violentmonkey
  • SingleFile,保存完整网页(包括图片、CSS、字体等资源)为单 HTML,用作离线归档,有些网站需要 设置 referer,也有 MV3 版本,另有 single-file-cli
  • Zotero Connector,联动 Zotero,不做研究就不常用
  • 其他一些特定网站的增强插件,其实可以通过用户脚本解决,上面喷了那么多这里我就不举反例了

我使用的脚本

由于安装时会弹出确认框,源码不加混淆则一览无余,建议哪怕完全不懂代码也要塞给 LLM 问问漏洞。 以及脚本如果出现用下面这种方式匹配的,99.99% 的情况你需要重新考虑使用价值和作者的开发水平:

// @match        *://*/*

前几个月进行基础设施迁移的时候大幅重构过,现在基本只用自己写的,使用场景很局限,不足为外人道,简单列一下略微通用的:

  • pangu.js插件和官方脚本请求的都是 minified JavaScript,原版停更多年,不如魔改 user.js,减少对 CDN 的请求,还能离线安装和使用已打赢复活赛,参考以前的 user.js 自己搓了脚本,不需要插件
  • 参考 LibRedirect 写的脚本,当然功能性要差得多,也没有均衡负载,实在懒得写也可以装插件
  • Open-the-F-king-URL-Right-Now,外链跳转,由于用户脚本权限不足,体验没有插件好,够用
  • Bypass All Shortlinks Debloated,外链跳转,针对国外网站
  • Skip Redirect Inplace,上面两个需要实际点击才能跳转外链,我写的这个直接替换文内链接,避开了愚蠢的外链提醒,只作为上面两个脚本的补充
  • 拒绝二维码登录,针对国内网站,连网页版登录都不忘推一下 app🙄注意默认的匹配过于宽泛,没有排除购物网站的付款界面,建议在类似页面自行添加 @exclude-match
  • Clean-Tracking-URLs 或者 链接地址洗白白,去除追踪参数,由于功能性质都用了 // @match *://*/* 这种匹配,是否属于那 0.01% 的特殊情况看个人需求
  • 文本复制限制解锁,原理很简单,我用的是 文本选中复制 - 通用,只在需要时开启
  • Show Original Picture,打开图片时自动跳转高清原图,数量多了还是 gallery-dl 方便
  • 上文提到的 M3U8、图片批量下载用户脚本

还有一些特定网站的,CnGal/VNDB 就不介绍了:

结语

至此本系列就告一段落,虽然早就习惯用各种企业批量部署的方式对浏览器进行调教,但写一个系列的想法还是源自 Chromium 使用 policy-templates 允许 ManifestV2 扩展。

一个人的命运虽然要考虑历史的进程,但势必少不了自我奋斗,浏览器的调教也是如此。

各种标准和浏览器本身都在随着互联网在不断发展,本系列介绍的方法只能说适用于当前的环境。 Netscape Navigator 和 Internet Explorer 互搏如今看来已经是遥远的历史, Project Xanadu®Gopher 更是无人问津。不知道今天的互联网形式还能存在多久,且行且珍惜。


  1. 说句题外话,浏览器指纹这东西很多时候就是图一乐,特征明显只能让人分析出「谁是谁」,并不能直接反推得出「你是你」。独特的浏览器指纹也就是「安装 ubo、常看 HN、使用 Matrix 的网民 A」、「安装十款比价插件、常逛 OnlyFans、天天用 Tinder/Instagram 的网民 B」这种程度。由于浏览器指纹本身很容易修改,「指纹」一词颇具误导意味。毕竟一般人类对于指纹/虹膜这类生物识别信息的泄漏毫无办法,总不能砍手指戳眼睛(又不是 yakuza),网民 A/B 可能只是同一个浏览器的不同 profile…… ↩︎

  2. 由于本文旨在吐槽不必要的浏览器插件,这里不做深入探讨,感兴趣可以自行阅读 如何防止黑客入侵 (8):物理隔离的几种玩法,该操作(文中的「招数 4」)已经优化为物理隔离 3 型(导出 cookies 后传输并不需要交换存储介质) ↩︎

  3. 「难」也只是相对的,下载几百个 TS 片段本身毫无难度(哪怕采用 AES 加密也是如此),难的永远都是合并 ↩︎

  4. 这里说的是与「浏览器」本身关联不紧密的插件,像网页调试、请求模拟之类的开发辅助插件,脱离浏览器就是无稽之谈(换成 headless 肯定不算脱离= =),「不需要」也无从说起 ↩︎

  5. SteamDB 这种功能拓展类型的算半个,不过插件的大部分功能用户脚本确实也能实现╮( ̄▽ ̄)╭ ↩︎

  6. 密码管理器最好还会定期委托第三方进行代码审计,当然只要开源理论上谁都能检查,但密码学毕竟不是前端,不是什么阿猫阿狗都能学会 ↩︎

  7. 顺带一提,Steam 的令牌手机验证器,其实就是魔改 TOTP(即 RFC 6238),但实际安全性并没有比原始 TOTP 更强= =恰恰相反,由于 Steam 的缓存机制和傲慢(不积极回复漏洞提交),盗号方式五花八门,建议早死早超生。当然,不管怎么样都比在 4202 年还坚持只能用邮箱当两步验证的 GOG 要好得多…… ↩︎

  8. 这里默认没有单独保存恢复代码。一些文章中可能推荐你把它们打印出来,但我感觉这保管起来也挺麻烦= =而且账号多的话时不时要更新,每次都得撕碎 + 化学浸泡 + 焚烧想想都累 ↩︎

Vinfall's Geekademy

Sine īrā et studiō