Chrome 配置文件与反检测浏览器配置文件:真正的区别在哪里

Chrome 配置文件隔离的是数据,不是设备、时钟或网络连接。本文讲清这条界线究竟划在哪里,以及什么时候值得跨过去。
Chrome 配置文件隔离的是数据,不是设备。这就是简短的答案,也解释了为什么基于 Chrome 配置文件搭建的多账号方案一开始运转良好,随后却悄无声息地失效。
你在 Chrome 中创建的每个配置文件,都会在磁盘上拥有自己的一个文件夹。Cookie、历史记录、已保存的密码、扩展程序和书签都存放在这个文件夹里,不会外流。而文件夹之下的一切都是共享的:同一个操作系统、同一套图形栈、同一组字体、同一个时钟、同一条网络连接。读取设备信号的网站,看到的是同一台电脑在替你名下的每个配置文件作答。
Chrome 配置文件真正隔离了什么
Chrome 配置文件的初衷是让一家人共用一台笔记本,就这个用途而言它们做得很好。它们提供的隔离在其范围内是真实有效的。
- Cookie 存储。每个配置文件都有自己的一份,因此在一个配置文件中登录某个网站,其他配置文件仍处于未登录状态。
- Local Storage、Session Storage 和 IndexedDB。网站存储写在配置文件夹内,所以两个配置文件可以为同一个网站保存两个互相独立的会话。
- 历史记录、书签和自动填充。你在一个配置文件中做的任何事,都不会出现在其他配置文件里。
- 扩展程序。按配置文件分别安装,各有各的设置和存储。
- 缓存和 Service Worker。同样按配置文件区分,这比听上去更重要,因为 Service Worker 可以保存自己的标识符。
这就覆盖了身份中的存储这一半,而且覆盖得很到位。如果你的问题只是个人账号和客户后台共用一个浏览器导致被登出,Chrome 配置文件就能解决,读到这里就可以了。
每个 Chrome 配置文件共享什么
人们很晚才发现的一点是:Chrome 配置文件只围着数据划了一条边界,除此之外什么也没围。在这条边界之下,每个配置文件上报的都是同一台机器,因为它本来就是同一台机器。
设备身份
打开两个 Chrome 配置文件,让每个都报告自己是什么,得到的答案完全一样。屏幕尺寸和像素比。报告的处理器核心数。平台和 User-Agent。WebGL 返回的显卡字符串。页面在屏幕外绘制文字再读回像素所得到的 Canvas 哈希。让振荡器穿过浏览器音频图所得到的音频哈希。通过测量候选字体中的文字推断出的字体列表。这些值没有一个存放在配置文件夹里,所以切换配置文件时没有一个会变。
两个账号报告出相同的 Canvas 哈希、相同的 WebGL 渲染器字符串和相同的字体列表,就是同一台电脑上的两个账号。网站不需要推断,它读到的是事实。
网络路径
每个 Chrome 配置文件都从同一个地址出网。代理设置属于浏览器实例,位于该实例内部的配置文件无法拥有自己的代理。在 Windows 和 macOS 上,Chrome 使用系统代理,而命令行参数则作用于浏览器的一切行为。于是你所有的配置文件都从同一个地方、同一个国家、在同一时刻抵达网站。
时钟与区域设置
时区来自操作系统。在大多数环境中,主语言也是如此。为某个配置文件改动其中任何一项,就等于为所有配置文件、乃至这台电脑上的一切都改了。这是最隐蔽的一项。代理在一个国家、时钟在另一个国家,是非常刺眼的不一致,而且即便你用别的办法解决了网络路径,Chrome 也没有办法只为单个配置文件修正时钟。
为什么共享的那一半很重要
建立关联的成本很低。网站不需要证明两个账号属于同一个人,只需要一个值得去看的理由,而在自称互不相关的多个账号之间出现一致的设备值,就是这样的理由。
还有第二重代价,而且来得更早。账号数量超过寥寥几个之后,Chrome 配置文件本身就有一些实际的失效模式:
- 配置文件选择器只是一排彩色圆圈。没有搜索,没有分组,没有备注栏,也没处记录某个配置文件到底对应哪个账号。
- 同步把配置文件绑定到一个 Google 账号上,这会把你的各个配置文件重新拉到一起,而不是推开。
- 在错误的窗口里操作很容易,因为区分两个窗口的只有角落里一个小小的头像。
- 配置文件夹理论上可移植,实际上很别扭。把它复制到另一台机器上,其下的设备就变了,而网站看得到这一点。
逐层对比
| 层级 | Chrome 配置文件 | 反检测配置文件 |
|---|---|---|
| Cookie 和网站存储 | 每个配置文件各自独立 | 每个配置文件各自独立 |
| 历史记录、书签、扩展程序 | 每个配置文件各自独立 | 每个配置文件各自独立 |
| Canvas、WebGL 和音频值 | 本机所有配置文件共享 | 按配置文件生成并保存,每次打开都保持不变 |
| 字体、屏幕和平台 | 本机所有配置文件共享 | 按配置文件设置,作为一套自洽的组合生成 |
| 时区和区域设置 | 取自操作系统 | 按配置文件设置,与线路所报告的国家一致 |
| 网络路径 | 整个浏览器共用一条线路 | 每个配置文件一个代理,账号接入之前先经过测试 |
| 组织管理 | 一排头像 | 名称、编号、备注、分组、文件夹和搜索 |
| 自动化 | 启动参数 | 本地 API:启动配置文件并返回调试端点 |
什么时候 Chrome 配置文件就足够了
经常如此。把这一点说清楚,比一段更长的推销更有价值。
- 在同一台电脑上把工作和私人生活分开,没有人需要向任何人隐瞒什么。
- 一家人共用一台笔记本。
- 开发者在自己拥有的服务上,把测试账号和真实账号分开。
- 在明确允许持有两个账号的服务上,由同一个人通过同一条家庭宽带使用两个账号。
在所有这些情形中,共享的设备身份都是准确的。你是同一台电脑上的同一个人,每个配置文件报告同一台机器,是对现实的如实陈述。没有任何原本不存在的东西被推断出来。
一旦这些账号本应互不相关,共享的那一半就不再准确了:不同的客户、不同的店铺、各自应当看起来像不同用户的不同测试环境。此时相同的设备值描述的是一种你从未打算呈现的关联。
反检测配置文件增加了什么
反检测配置文件保留了 Chrome 配置文件已有的一切,然后接管 Chrome 留作共享的那三层。
- 独立的设备身份。平台、屏幕、字体、图形字符串、Canvas、WebGL 和音频被一起生成,描述的是一台合理可信的机器,然后保存下来,使该配置文件每次打开都呈现同一台机器。
- 独立的网络路径。代理绑定在配置文件上而不是浏览器上,因此每个配置文件都有自己的地址,并且在账号接入之前先验证该地址。
- 独立的时区和区域设置,按配置文件设置,使它们与线路保持一致,而不是与你所坐的这张桌子保持一致。
三者的要点都是一致性。每次打开都报告不同设备的配置文件,描述的是一台没有人拥有的硬件。真正有用的目标,是一台看起来普普通通、然后每次访问都原样不动的设备。
组织管理这一半,在有人体会过没有它的日子之前,总是被低估。配置文件带有名称、编号、备注和标签,归入分组和文件夹,可以搜索,所以任何人在办公室里大声说一句“42 号配置文件”,同事就知道指的是哪一个。从列表行中打开配置文件,它的身份和线路也随之而来,不存在需要有人记得去设置什么的环节。
从 Chrome 配置文件迁移出来
人的本能是把 Chrome 配置文件夹整个复制过去然后继续用。请克制。复制过去的文件夹带着 Cookie 和仍在生效的会话,却把它们交给一个报告着不同设备的浏览器,而这些会话当初是在另一台设备上建立的。这种变化是看得见的,而且发生在第一次打开时,这是最糟糕的时机。
更慢的路径反而更稳妥。
- 为每个账号写下一行记录,即使目前一个 Chrome 配置文件里放着好几个账号,也要分别计数。
- 先建好代理库。添加端点,测试它们,并记录每一个实际报告的国家。服务商对其端点的描述往往过于乐观。
- 为每个账号创建一个配置文件,并在首次登录之前分配好线路。首次会话决定了该账号“正常”的样子,所以第一次就做对是值得的。
- 将时区和区域设置调整为与线路所报告的国家一致,然后不要再动。
- 在新的配置文件中重新登录。是的,这意味着每个账号都要走一次二次验证,可能还要邮件确认。这是一次性的成本,换来的是一个真正在今后继续使用的设备上建立的会话。
- 在几周时间里分批迁移账号。在某个星期二下午一次性全部迁完,等于让每个账号的使用模式同时发生变化。
- 把 Chrome 留给它擅长的事:你自己的邮箱、你自己的网银,以及那些坦坦荡荡属于你自己的账号。
在关闭旧配置文件之前,先导出你需要的东西。书签和已保存的密码可以干净地从 Chrome 导出。Cookie 则值得留在原地不带走,因为迁移的全部意义就在于会话是在新环境中创建的。
坦率的总结
Chrome 配置文件彻底解决了共用 Cookie 存储的问题,但也只解决了这一点。对很多人来说,Cookie 存储就是问题的全部,再叠加更多工具,只是在为一个他们并不存在的难题耗费精力。
但如果你的账号本应互不相关,那么 Chrome 配置文件之下共享的设备身份,就在做一件你从未要求它做的事。这就是那条界线。你站在界线的哪一侧,决定了这份对比中其余的一切。
需要明确说明一点。以上这些并不构成任何许可。条款禁止持有多个账号的服务,即使这些账号彼此隔离,依然是禁止的。请把环境隔离用于你有权从事的工作。

