浏览器调教指南 - 插件篇

引言

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

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

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

不需要的

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

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

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

插件标准

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

  • 开源,最好是自由软件
  • 用户足够多,这样才能及时发现潜在问题,具体数目得根据插件的使用场景判断,小众领域 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,不做研究就不常用
  • 其他一些特定网站的增强插件,其实可以通过用户脚本解决,上面喷了那么多这里我就不举反例了

我使用的脚本

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

// @match        *://*/*

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

  • pangu.js,插件和官方脚本请求的都是 minified JavaScript,由于原版停更多年,不如自己修改 user.js,减少对 CDN 的请求,还能离线使用
  • 参考 LibRedirect 写的脚本,当然功能性要差得多,也没有均衡负载,实在懒得写也可以装插件
  • Open-the-F-king-URL-Right-Now,外链跳转,由于用户脚本权限不足,体验没有插件好,够用
  • 拒绝二维码登录,针对国内网站,连网页版登录都不忘推一下 app🙄
  • Clean-URLs 或者 链接地址洗白白,去除追踪参数,注意这俩脚本由于功能性质,都用了 // @match *://*/* 这种匹配,是否属于那 0.01% 的特殊情况看个人需求
  • 文本复制限制解锁,原理很简单,一堆可用脚本
  • 上文提到的 M3U8、图片批量下载用户脚本

还有一些特定网站的,像 VNDB 之类的就不介绍了:

结语

至此本系列就告一段落,虽然早就习惯用各种企业批量部署的方式对浏览器进行调教,但写一个系列的想法还是源自 通过注册表允许继续使用 MV2 扩展

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

各种标准和浏览器本身都在随着互联网在不断发展,本系列介绍的方法只能说适用于当前的环境。 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. 别用我在 浏览器调教指南 - Chromium 篇#允许 ManifestV2 扩展 里的方法来给它续命,续了也别说是我教的 ↩︎

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

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

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

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

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

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

  10. 虽然 V 社官方也有动作,但毕竟是 V 社,做事总归疏漏很多,脚本当补全也不错 ↩︎

Vinfall's Geekademy

Sine īrā et studiō