解释

真正让两个账号互不相干的是什么

在同一个浏览器里打开的两个账号,早在有人去看指纹之前就已经被关联了。它们共用一套 Cookie 存储、一份缓存、一份存储配额和一份 Service Worker 列表——而人们为了把它们分开所做的那些事,大多挡不住这些。

在网站检查的三件事里,隔离最不起眼,却是最多人栽在上面的一件,因为它失败的时候是看不见的:一切都很正常,直到两个本不该彼此知道的账号在同一天被一起处理。

问题所在

两个标签页之间会漏掉什么

浏览器环境就是磁盘上的一个目录,网站能写的一切都落在里面:Cookie、localStorage、IndexedDB、HTTP 缓存、Service Worker 注册、权限授予。同一个窗口里的两个标签页共享这一切,另开一个窗口也一样。网站不需要任何高明手段就能把它们对上——它只是读回自己第一次存下的那个标识。

常见的变通办法各自堵住一条通道,其余的照样敞着。无痕窗口拿到一份干净的 Cookie 存储,但所有无痕窗口共用同一份,而把它们全部关掉,你想留下的那个会话也就一并没了。容器类扩展把 Cookie 和存储分了区,却仍跑在同一个浏览器进程里,带着同一批已安装扩展和同一份硬件指纹。换第二个浏览器能换来第二个身份——然后第三个账号又要第三个浏览器。

环境

每个环境一个目录

在 Argus 里,隔离的单位是环境,而每个环境背后是它自己的用户数据目录。不是共享目录里的一个分区,而是会话启动时让 Chromium 指向的一棵独立目录树。每个会话都从自己的目录起步,别的会话里的东西一样都不会带过来。

  • 每个环境一个专属的用户数据目录——存储、缓存和 Cookie 存储各自独立

既然边界是一个目录而不是一项设置,它就能像文件系统那样扩展。数百个彼此完全隔离的环境,每一个都有自己的存储、Cookie 和身份。 这份列表是按这个规模设计的,而不是为了几个标签页——文件夹、标签、搜索与筛选、批量启动与批量编辑,还有软删除:环境进回收站,而不是直接毁掉一个你也许还用得上的会话。

每个会话都在自己的目录里打开。

浏览器

上一次运行的东西一样都不会带过来

光有独立目录还不够,因为浏览器总想在“上次你是怎么用的”这件事上帮忙。恢复的标签页、找回的会话、崩溃处理程序留下的表单——每一样都是让上一次运行在新一次里冒出来的路径,也就让周二关掉的那个账号在周三和另一个账号并排开着。

  • 会话恢复被关掉了,上一次运行不会在新的一次里冒出来

浏览器

代理施加在网络层

在所有环境共用一个出口 IP 的前提下隔离存储,只解决了一半问题。在 Argus 里,代理属于环境本身,并且施加在会话上,而不是通过某个页面能枚举并读取的代理切换扩展。

  • 代理施加在网络层,而不是通过一个页面能察觉到的扩展

一个地址被启用之后还要扛住什么——健康检查、拒绝它的网站,以及检查失败时会发生什么——由代理在 Argus 里如何工作来讲。

浏览器

网站为识破自动化而探测的端口

有一种检测手法与存储毫无关系:页面让浏览器回连本机 localhost 上那些自动化框架和远程桌面工具常用的端口。普通访客的机器会拒绝连接;开着调试端口的机器则会应答,于是页面得知了任何指纹都不会告诉它的事。

  • 默认的拦截名单盖住了那些站点用来识别自动化的远程访问端口

Cookie 集

只登录一次,不必把密码传来传去

隔离带来一个很实际的问题:如果每个环境都是空的,是不是得挨个登录一遍?不用——会话本身就是可以存下来再分配的东西。一套 Cookie 只上传一次,之后指派给任何需要它的环境。

  • 共享库:同一套 Cookie 在环境之间调换,不必重新上传
  • 从单个文件导入,或一次导入整个文件夹
  • Cookie 在启动时就写进会话,所以环境打开时已经是登录状态

对团队来说,这就是“密码丢在群里”和“登录状态跟着环境走”的区别。谁打开它,谁就已经是登录状态,而干活的人根本不需要拿到凭据。代运营团队的用法正是建立在这一点上。

老实说

隔离解决不了什么

隔离能保证两个环境不共享任何状态。它并不能让它们看起来像两个不同的人,单靠它也留不住账号。

两个隔离得再彻底的环境,跑在同一台机器上,画出的 canvas 一样、报告的 GPU 一样、走的时钟也一样——设备这一半由指纹识别如何工作来讲。而且只要没给每个环境配上自己的代理,它们出去的还是同一个 IP。这三件事必须同时成立;只靠其中任何一件,都是一套一直好用、直到不好用的方案。

准备好大规模运行环境了吗?

下载 Mac 或 Windows 版 Argus,免费获得 5 个环境开始使用。