工具

永久 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 等注重隐私的浏览器,它实现了存储分区并积极拦截已知的追踪技术。

相关浏览器隐私工具