开源指纹浏览器:到底哪一层是开源的
搜「开源指纹浏览器」能搜到不少项目。更难找到的是一个直接的回答:它们哪一部分是开源的。因为「指纹浏览器」这个名字底下是三个彼此独立的层,而真正决定你会不会被识别出来的那一层,恰恰最不可能出现在仓库里。
这不是在反对开源,而是在贴上标签之前你需要先做的区分——否则那个标签什么也没告诉你。
一个名字底下藏着三层
这个品类里的所有东西,都是下面三样的某种组合:
- 浏览器内核。 一个打过补丁的 Chromium 构建,指纹面本身物理地住在这里——渲染栈、图形层、字体子系统和 JavaScript 引擎实际报告什么、实际怎么做。
- 配置文件与编排层。 你直接打交道的那个应用:配置文件存储、启动参数、按配置分配代理、团队共享、同步。
- 自动化绑定。 驱动补丁和反检测插件,让脚本会话看起来不那么像脚本会话。
被称作开源的项目,通常是第 2 层或第 3 层。第 1 层——打过补丁的内核——建起来贵、跟上游保持同步更贵,因此即便周边代码都公开了,它也最常以预编译二进制的形式分发。
这是最值得先确认的一件事,而且看一眼仓库结构就能确认:里面有浏览器本身的源码,还是只有「启动一个浏览器」这件事的源码?
为什么层比许可证更要紧
原因归结为一致性,而一致性就是这个品类的全部——指纹浏览器到底做了什么那篇已经展开讲过这一点。
第 2 层的工具能改变 JavaScript 报告什么,却很难改变内核实际做什么。当这两者对不上时——报告出来的屏幕尺寸和页面实际的布局方式对不上、声称的图形渲染器和图形层实际产出的结果对不上、语言设置和底层格式化例程的行为对不上——这个不一致本身就是一个信号,而且比其中任何单一取值都更具区分度。
于是一个在脚本层大力伪装的外壳,可能让你比用一个普通浏览器时更容易被认出来。而这种失败是无声的:每个值看起来都和你设定的一样,你自己的测试里没有任何东西会暴露底下那层不一致。
开源真正换来的东西
真实存在、也值得要的:
- 可审计。 你能读到这个工具往外发什么、发给谁。一个品类的全部前提就是控制什么东西离开你的机器,而中间摆着一个闭源二进制,这本身就是一种张力。
- 没有你没选择过的厂商遥测。
- 自托管的配置文件存储。 你的配置和 cookie 留在你自己掌控的基础设施上,而不是别人的云上。
- 可以钉版本。 你能冻结一个已知可用的构建,而不是在投放中途收到一个改变行为的更新。
- 没有按席位计费——这在规模大时要紧,在只有三个配置时并不要紧。
而不论代码写得多好,它都换不来的:
- 一个会自己保持时新的指纹面。 上游浏览器在不停演进,每一个版本都会改变「一个正常客户端长什么样」。保持正常不是一次性成就。
- 一个称得上名字的团队权限模型——多数项目里没有。
- 别人替你承担的维护负担。 这就是整笔交易的核心,也是下一节的内容。
维护才是真正的成本,而且是持续的
闭源厂商把内核维护摊到所有客户身上。开源项目的内核工作,取决于是否还有维护者在做——而且和普通的库不一样,这里落后了不会给你报错,它只会产出一个看起来稍微不太寻常的客户端,然后越来越不寻常,而你在本地观察不到任何失败。
这反而给了你一套不需要相信任何人宣传的评估方法:
- 拿提交的时新程度对照上游浏览器的发版节奏,而不是对照日历。一个最后一次改动停在两个大版本之前的项目就是落后了,哪怕按月份算它还很近。
- 看这个项目到底跟不跟内核版本,还是只给自己的启动器打版本号。一份从不提及底层浏览器版本的更新日志,描述的是第 2 层。
- 看它在上游发版时会发生什么。 这个品类里健康的项目,会有一个和浏览器发版绑在一起的可见节奏。没有这个节奏,本身就是答案。
怎么自己验证一个说法
三个检查,按花费的力气递增:
- 先读仓库结构,再读 README。 是内核源码,还是一个启动器加一个二进制下载?这一下就回答了「哪一层」的问题。
- 在同一台机器上跑两次指纹测试——一次经过该工具,一次用普通浏览器——然后对比两份结果,而不是单看其中任何一份。你要找的不是更低的唯一性得分,而是这些取值彼此之间是否自洽。浏览器指纹测试讲了怎么读这份输出,以及为什么唯一性是个不该去优化的数字。
- 检查整个会话内的一致性,而不只是页面加载那一刻。 首个请求时稳定、后续请求开始漂移的取值,比压根没伪装还糟——因为会话内漂移不是真实客户端会有的行为。
什么时候开源是对的选择
适合:你是单个技术型操作者、运行的配置数量不多、可审计对你确实重要、你能钉住版本并自己评估升级、并且你接受把维护这件事当成自己的事。
不适合:配置需要在团队内共享且需要有意义的权限划分、操作者不是技术背景、账户数量让手工维护变得不现实、或者你需要指纹面在没人做这件事的情况下保持时新。这些约束正是把团队推向托管型工具的原因——这个决策的形状见多账号管理工具。
有一件事不随许可证改变:这些工具都修不好一个问题出在浏览器之外的账户。如果账户被标记的原因住在素材、支付或历史里,换一个浏览器——开源还是闭源——什么也改变不了。什么时候你才真的需要它值得在选型之前读,而不是之后。
常见问题
有完全开源的指纹浏览器吗?
有把编排层公开的项目,也有公开内核补丁的。稀缺的是那种能长期在公开场合让打过补丁的内核跟上上游发版的项目,因为那才是贵的部分。在接受一段描述之前,先在仓库里找内核源码、在更新日志里找内核版本追踪。
开源比商业工具更安全吗?
是不同的风险,不是更小的风险。你用「一个你无法审视的厂商」换来了「一份没人有义务去做的维护」。哪个更安全,取决于你是真的会去读代码并跟进上游,还是只是打算这么做。
免费开源的效果能和付费的一样好吗?
在启动器和配置管理上,往往可以。在内核指纹面上,完全取决于那一层有没有人维护。这个品类里项目之间的差距,是维护差距远多于功能差距。
我能不能直接给标准自动化驱动加一个反检测插件?
那是有第 3 层而没有第 1 层。它去掉了最明显的自动化标记,把内核层面的指纹面原封不动留在那里——这对某些任务够用,对另一些不够。按上面说的方法去测,而不是预设任何一种结果。
开源是不是意味着我能确切看到自己呈现的是什么指纹?
只对有源码的那些层成立。如果内核是以二进制分发的,那你在配置里读到的值,是这个工具打算呈现的,不一定是它实际呈现的。这恰恰就是那个「两个浏览器对比」测试值得跑一遍的原因。
一句话总结
这个标签能回答的比看上去少得多。指纹浏览器是三层结构,识别主要发生在内核层,而内核恰恰是那些自称开源的项目里最常以二进制分发的一层——所以先看仓库结构,再看别的。开源确实换来可审计、自托管配置和版本控制;它换不来一个会自己保持时新的指纹面,而保持时新是上游浏览器强加给你的、不管有没有人在做的持续工作。拿浏览器的发版节奏而不是日历去评估一个项目,用「经过工具」与「普通浏览器」两份指纹测试的对比去验证,并且把一致性——而不是唯一性——当作真正要看的那个数字。