CNAME 伪装利用一条 DNS 记录,让第三方追踪者看起来像第一方,绕开只认地址栏域名的 Cookie 拦截。
第三方Cookie拦截机制都基于同一个假设:只要看一眼域名,就能分辨出它是第三方还是第一方。CNAME伪装在DNS这一层就打破了这个假设——早在浏览器有机会检查任何Cookie之前。网站所有者用一条DNSCNAME记录,把自己的一个子域名(比如metrics.example.com)指向某家追踪公司的基础设施,此后所有发往这个子域名的请求都会一路解析到追踪者那里——但在浏览器和任何Cookie策略眼中,它看起来仍然和example.com本身一模一样。
关键要点
- CNAME记录能让网站所有者把自己的一个子域名,别名指向第三方追踪者的域名,于是发往该子域名的请求由追踪者处理,浏览器看到的却仍是网站自己的主机名。
- 这套手法从设计上就绕开了第三方Cookie拦截:由"子域名"设置的Cookie,在浏览器的同站逻辑看来就是第一方Cookie,因为你看到的主机名根本没变过。
- 一项已发表的测量研究发现,超过1700个网站用这种方式,一共伪装了50多个不同的追踪者,说明这是一种真实部署的规避手法,而不是理论上的假设。
- 各浏览器的应对并不一致:Safari的智能防跟踪功能会把检测到经CNAME伪装的响应所设置的Cookie,有效期限制在7天以内;Brave会自己解析CNAME链,把真正的目的地和自己的过滤规则列表做比对;Firefox内置的增强型防跟踪保护并不会自行解析CNAME,因此伪装过的追踪者如果没有像uBlock Origin这样的扩展介入,就可能悄悄溜过去。
- 这是反弹追踪在DNS层面的"表亲":两者利用的都是"这个域名看起来是谁"和"这个域名实际由谁控制"之间的落差,只是发生在技术栈的不同层级。
CNAME 伪装到底是什么
DNS允许任何域名所有者创建一条CNAME(规范名称)记录,意思是"这个子域名其实只是那个域名的另一个名字"。这本是一块普普通通、支撑着日常运转的互联网基础设施——CDN、邮件服务商和SaaS平台一直都在用CNAME,让客户的子域名可以直接指向共享基础设施,客户自己不必运营服务器。
CNAME伪装把这套机制原封不动地挪用来做追踪。某家追踪服务商会要求它的客户(网站所有者)新建一个子域名——比如stats.example.com或t.example.com——并把它的CNAME记录指向自己的域名。从这一刻起:
- 你的浏览器请求
stats.example.com。 - DNS解析悄悄把这次查询转到追踪者的服务器上。
- 响应——包括其中任何
Set-Cookie头——是从追踪者那边返回的,但就浏览器的地址栏和同源判断而言,你从头到尾都在和example.com打交道。
追踪者在浏览器能看到的任何地方都不会以独立第三方域名的身份出现。它伪装成了你正在访问的网站的一个子域名,也就顺理成章地继承了这个网站的第一方信任。
CNAME 背后的 DNS 解析链
这套手法之所以能成立,靠的是DNS解析一个再普通不过的特性:一条CNAME可以指向另一个名字,而那个名字又能正常继续解析下去,浏览器自始至终只关心它最初查询的那个主机名。关于这一步解析本身是如何进行、又为何自成一道重要的隐私边界,可参见我们关于DNS泄漏的文章——CNAME伪装是一个不同的问题,但它利用的正是同一个解析步骤。
你可以亲自为任意主机名查出这条链:
# 追踪某个主机名完整的 CNAME 链
dig stats.example.com +trace
# 更简短的写法:只显示规范名称
dig CNAME stats.example.com +short
如果一个营销或统计类子域名,通过CNAME解析到了一个你不认识的域名——一个属于广告技术或分析服务商、而非网站自己的域名——那就是伪装的典型模式。安全研究者已经具体记录过这一点:一项经过同行评审的测量研究发现,超过1700个网站在用CNAME伪装,把流量导向50多家不同的追踪公司,证实这是一种正在被实际使用的技术,而不是边缘案例。
为什么它能绕开第三方 Cookie 拦截
第三方Cookie拦截的原理,是比较浏览器地址栏里的域名和试图设置或读取Cookie的域名——不一致就拦截。CNAME伪装从来不会制造这种不一致。你的浏览器解析并连接的主机名,不折不扣就是第一方网站的一个子域名,不管背后实际是哪家公司的服务器在应答。在这个响应里设置的Cookie,按浏览器执行的每一条同站规则来看,都是第一方Cookie。
这正是反弹追踪所利用的同一个结构性漏洞,只是走了另一条路:反弹追踪是通过重定向,让追踪者自己的域名短暂变成第一方;而CNAME伪装则是让追踪者以网站自己某个子域名的身份来应答。这两种手法都完全不需要用到第三方Cookie,所以一条专门为拦截第三方Cookie而设计的规则,压根没有可以拦下它们的抓手。
浏览器与标准层面的应对
由于这种规避发生在DNS这一层,要修复它,浏览器就必须真的去解析这条链,查清楚究竟是谁在应答——而不能只看它拿到的那个主机名。
Safari的智能防跟踪功能(ITP)是主流浏览器里第一个应对方案。正如WebKit自己的《CNAME伪装与反弹追踪防御》一文所述,ITP能检测到某个第三方正通过CNAME被伪装,并把该响应中设置的Cookie有效期限制在7天——这正是ITP早已套用在JavaScript创建的Cookie上的同一道上限,堵上了追踪者原本借CNAME绕开的那个缺口。
Brave则更进一步,会在决定是否放行请求之前,自己把这条链解析出来。Brave的《对抗CNAME诡计》一文描述了它会拿两个URL去比对自己的过滤规则列表:一个是原始请求的主机名,另一个是把CNAME解析出的规范域名替换进去之后的同一个请求。如果真实的目的地命中了已知追踪者,Brave会直接拦截这个请求——它甚至不需要等到Cookie真正被设置。
相比之下,Firefox的增强型防跟踪保护并不会自己去解析CNAME链;它的拦截逻辑依赖一份人工维护的追踪域名清单,比对的是你能看到的那个主机名,而一个伪装过的子域名根本不会出现在这份清单上。实际情况是,Firefox用户往往要靠扩展才能获得CNAME反伪装的保护——比如uBlock Origin就能自己解析这条链,再针对真实目的地做过滤——而不是靠浏览器内置的防护本身。关于这种基于清单的内置防护具体如何运作,可参见MDN对Firefox追踪保护的概述。
CNAME 伪装与相关技术有何不同
| 技术 | 隐藏的是什么 | 手法发生在哪个环节 |
|---|---|---|
| CNAME伪装 | 追踪者的真实域名 | 对第一方子域名的DNS解析 |
| 反弹/重定向追踪 | 追踪者自己域名上短暂出现的第一方身份 | 浏览器内一次快速的重定向 |
| DNS泄漏(隐私问题,非追踪手法) | 你选用的解析器,而非某个追踪者的身份 | VPN/DNS配置不当,导致查询暴露给你的ISP |
最后一行值得特别说清楚:DNS泄漏是一种把你自己的浏览行为暴露给ISP的隐私失误;CNAME伪装则正好相反——是网站故意利用DNS,向你隐藏一个追踪者的真实身份。两者都发生在DNS这一层,但除此之外没有任何相似之处。往更大的范围看,"单一技术信号说明不了全部问题,所以系统要综合多个信号"这个道理,在网络这一侧同样成立:可参见网站如何检测VPN和代理,了解那边的检测系统同样得综合多个较弱的信号,而不是只凭一个主机名或IP就下结论。
常见问题
CNAME 伪装是非法的,或者违反浏览器政策吗?
没有任何法律禁止它,DNS协议本身也没有"伪装"这个概念——CNAME记录就是普普通通的基础设施。这对浏览器来说是一个策略与检测层面的问题,而不是协议层面的违规:Safari和Brave现在一旦检测到CNAME伪装的Cookie,都会区别对待,而DNS标准本身没有做出任何改动。
拦截第三方 Cookie 能阻止 CNAME 伪装吗?
不能。这正是这种手法的整个意义所在——被伪装的追踪者所设置的Cookie,按浏览器同站逻辑检查的每一条规则来看都是第一方Cookie,所以第三方Cookie拦截根本不会被触发。要拦下它,需要真正解析出CNAME链,查清楚目的地究竟由谁控制,这正是Safari和Brave正在做的事。
我怎么知道自己访问的网站在用 CNAME 伪装?
看看页面的网络请求都用了哪些子域名,然后用dig CNAME <主机名> +short解析它的CNAME链。如果一个看起来像营销或分析用途的子域名,解析出来的却是某家已知广告技术或分析公司的域名,而不是网站自己的,那就是这个模式。像uBlock Origin这类自带DNS解析能力的扩展,会对每个请求自动做这项检查。
VPN 或 DNS over HTTPS 能防住 CNAME 伪装吗?
不能直接防住。加密或改道你自己的DNS查询,保护的是谁能看到你的查询——参见我们关于DNS泄漏防护的指南——但这并不会改变网站所有者为自己的子域名配置了什么。CNAME伪装是由网站一方决定的,不是你的网络路径决定的,所以只能靠浏览器(或扩展)去检查解析链本身,而不是靠加固你自己的DNS。不过,你自己这一侧的DNS状况仍然值得单独查一查——我们的VPN与DNS泄漏检测能看出你的VPN是否真的在替你保密DNS查询,而这正是你能掌控的那一部分。
总结
CNAME伪装之所以奏效,是因为DNS和Cookie策略运行在两个原本就不打算互相核实的层级上:浏览器信任自己解析出的主机名,而Cookie规则又信任浏览器对"第一方"的判断。把追踪者的应答通过一个别名子域名转一道,就能让这两道检查都顺利通过,而实质上根本没有任何东西真正是第一方的。Safari和Brave已经通过在做判断前先解析出真实目的地,堵上了这个缺口;Firefox则仍然依赖扩展来做同样的事。和本站介绍的每一项技术一样,诚实的结论是:没有哪一条单一规则——拦截第三方Cookie、加密自己的DNS,或是仅凭主机名就下判断——能挡住追踪者伪装自己的每一种方式。
推荐阅读:

