工具
永久 Cookie 追踪演示
了解“僵尸 Cookie”如何通过利用多种浏览器存储机制在删除后持久存在。
仅用于教育演示
此页面出于教育目的演示永久 Cookie 概念。我们不会实际追踪您。演示存储一个随机 ID 来展示持久化的工作原理,您可以随时完全清除它。
什么是永久 Cookie?
永久 Cookie(也称为“僵尸 Cookie”或“超级 Cookie”)是一种 JavaScript API,通过同时在多种不同的浏览器存储机制中存储相同的追踪 ID 来创建极其持久的 Cookie。
当用户删除 Cookie 时,永久 Cookie 会从任何剩余的存储位置重新创建自身。要真正删除永久 Cookie,您必须同时清除所有存储机制——大多数用户不知道如何操作。
最初的永久 Cookie 由 Samy Kamkar,安全研究员和永久 Cookie 创造者 于 2010 年创建,旨在展示在线维护隐私有多困难。
交互式演示
您的演示追踪 ID
生成中...
尝试仅清除 Cookie,然后点击“检查所有存储”查看 ID 如何持久存在
存储机制
永久 Cookie 利用 17 种以上不同的存储机制。以下显示了您的浏览器中哪些可用及其当前状态:
每种机制的工作原理
标准 HTTP Cookie 常见
传统方法——浏览器存储的小型文本文件。可通过浏览器设置轻松清除。
document.cookie = "tracking_id=abc123; expires=Fri, 31 Dec 9999 23:59:59 GMT";
HTML5 本地存储 常见
每个域名可存储最多 5-10MB。持续存在直到被明确清除。清除“Cookie”时经常被忽略。
localStorage.setItem('tracking_id', 'abc123');
// Survives browser restart, never expires
HTML5 会话存储 常见
类似于本地存储,但在标签页关闭时清除。可用于在会话期间传递数据以重新生成其他 Cookie。
sessionStorage.setItem('tracking_id', 'abc123');
IndexedDB 常见
浏览器中的完整 NoSQL 数据库。可存储大量结构化数据。用户很少清除。
const request = indexedDB.open('evercookie_db', 1);
request.onsuccess = (e) => {
const db = e.target.result;
// Store tracking ID in database
};
Canvas 指纹 PNG 隐蔽
将 Cookie 值编码为 PNG 图像中的 RGB 像素颜色,然后强制缓存。通过将缓存的图像绘制到 Canvas 并读取像素值来回读 Cookie。
// Encode "abc" as RGB: R=97, G=98, B=99
ctx.fillStyle = 'rgb(97, 98, 99)';
ctx.fillRect(0, 0, 1, 1);
// Later, read it back from cached image
HTTP ETag 隐蔽
ETag 用于缓存验证,但可以存储追踪 ID。服务器发送唯一的 ETag,浏览器在后续请求中将其发回。
// Server response:
HTTP/1.1 200 OK
ETag: "tracking_id_abc123"
// Browser's next request:
If-None-Match: "tracking_id_abc123"
HSTS 超级 Cookie 高级
通过在子域 HSTS 策略中编码位来利用 HSTS(HTTP 严格传输安全)。每个位是一个子域,设置或未设置 HSTS。
// Encoding "5" (binary: 101) across subdomains:
// bit0.tracker.com → HSTS ON (1)
// bit1.tracker.com → HSTS OFF (0)
// bit2.tracker.com → HSTS ON (1)
// Reading: check if browser upgrades each subdomain to HTTPS
Web 缓存 隐蔽
将追踪 ID 存储在缓存的 JavaScript 或 HTML 文件中。当浏览器加载缓存版本时,它包含该 ID。
// Server sends with far-future cache headers:
Cache-Control: max-age=31536000
// File contents:
var cached_tracking_id = "abc123";
window.name 隐蔽
window.name 属性在同一标签页内的页面导航中持久存在,即使导航到不同的域名。它可以存储最多 2MB。
window.name = "tracking_id=abc123";
// Survives navigation to other sites in same tab!
Flash Cookie (LSO) 已废弃
Flash 本地共享对象在浏览器控制之外存储数据。需要访问 Adobe 网站才能清除。Flash 现已失效,但曾经非常有效。
// ActionScript:
var so:SharedObject = SharedObject.getLocal("evercookie");
so.data.tracking_id = "abc123";
so.flush();
Silverlight 隔离存储 已废弃
Microsoft 的 Silverlight 插件有自己独立于浏览器存储的存储机制。Silverlight 现已停止。
历史记录窃取 已修补
通过访问 URL 中包含 ID 的方式将数据编码到浏览器历史记录中。可通过检查链接 :visited 样式来回读。浏览器已修补此问题。
// Create history entries:
location = "http://tracker.com/id/a";
location = "http://tracker.com/id/b";
// Read via CSS :visited (now blocked)
Brave 如何防护永久 Cookie
- 存储分区:按站点隔离存储,防止跨站追踪
- Ephemeral Storage: Third-party storage is cleared when you close the site
- Canvas Fingerprint Randomization: Defeats PNG-based cookie storage
- Blocked HSTS Supercookies: Clears HSTS state for tracking domains
- ETag Stripping: Removes tracking ETags from known trackers
- 无 Flash/Silverlight:完全拦截旧版插件
隐私影响
永久 Cookie 展示了网络隐私的一个根本问题:浏览器有太多地方可以存储数据。每个新的 API(IndexedDB、Service Workers、Cache API)都创建了另一个追踪器的潜在藏身之处。
虽然永久 Cookie 最初是概念验证,但其变体被以下方面在实际中使用:
- 用于跨站追踪的广告网络
- 欺诈检测系统
- 付费墙执行
- 政府监控工具
最佳防御是使用 Brave 等注重隐私的浏览器,它实现了存储分区并积极拦截已知的追踪技术。