---
title: "浏览器指纹是什么：网站不靠 Cookie 认出你的几类特征与自查方法"
description: "浏览器指纹是网页通过 JavaScript 和请求头读出的一组设备与软件特征。本文按五类拆开讲每项由哪个 API 读取、区分度高低、能否自己改，并给出用 cdnping /ip 逐项自查和降低可识别性的做法。"
url: https://cdnping.org/blog/browser-fingerprint-explained-self-check
language: zh-CN
published: 2026-10-21
category: "IP 与隐私"
tags: ["浏览器指纹","隐私保护","环境检测","Canvas","WebGL"]
source: cdnping.org
license: Free to quote and summarize with a link to the url above.
---
# 浏览器指纹是什么：网站不靠 Cookie 认出你的几类特征与自查方法

浏览器指纹，是网页在你不知情的情况下读取的一组设备和软件特征：系统和浏览器版本、屏幕尺寸、时区语言、已装字体、显卡渲染结果等。单看每一项都很普通，组合起来却可能足够独特，让网站在你清掉 Cookie、换了无痕窗口之后，仍然大致认得出是同一台设备。想知道自己暴露了什么，可以打开 [cdnping 的 IP 与环境检测](/ip)，它在本地算出各项指纹，再对照本文逐项看。

## 浏览器指纹和 Cookie 有什么不同？

Cookie 是网站写进你浏览器的一段标识，下次访问时浏览器把它带回去。它的特点是：存在你本地，你能看到、能删、能拦。

指纹不写任何东西，而是网站每次现场读取你浏览器的特征，再算出一个哈希值。两者的差异可以这样对照：

| 对比项 | Cookie | 浏览器指纹 |
| --- | --- | --- |
| 存在哪里 | 你的浏览器里 | 不存储，每次重新计算 |
| 用户能否删除 | 能，清除站点数据即可 | 没有可删的东西 |
| 无痕模式是否有效 | 有效，窗口关闭即清空 | 基本无效，硬件和系统没变 |
| 稳定性 | 删除前一直不变 | 浏览器升级、换显示器、装字体后会变化 |
| 常见用途 | 登录态、购物车、偏好设置 | 风控、反欺诈、跨站追踪 |

所以指纹不一定都是“追踪”。银行和登录系统也用它判断“这次登录是不是在一台陌生设备上”。问题在于，同一套技术也可以在你不同意的情况下，把你在不同网站上的访问串起来。

## 网站能读到哪些指纹？按五类来看

区分度指的是这一项能把人群切得多细。区分度低的项单独没意义，但多项叠加后，可识别性会明显上升。

### 第一类：UA 与操作系统

- 读取方式：HTTP 请求头里的 `User-Agent`、`Accept-Language`；JavaScript 的 `navigator.userAgent`、`navigator.platform`；Chromium 系浏览器还有 `navigator.userAgentData`（Client Hints）。
- 区分度：中等。主流浏览器加主流系统的组合人数很多，但小众版本、少见的系统组合会立刻显得突出。
- 能否改变：UA 字符串可以改，但网站还能通过别的特征推断系统和内核。cdnping /ip 的“内核版本反推”就是用 23 项浏览器特征反推实际内核版本，再和 UA 声称的版本对比。改了 UA 却没改其他特征，反而形成一处不一致。

### 第二类：屏幕与硬件

- 读取方式：`screen.width`/`height`、`devicePixelRatio`、色深；`navigator.hardwareConcurrency`（CPU 逻辑核心数）；部分浏览器提供 `navigator.deviceMemory`（内存档位）；触控点数 `maxTouchPoints`。
- 区分度：中到高。分辨率加缩放比例加核心数，能把常见笔记本、外接显示器、高配台式机分得比较开。
- 能否改变：硬件本身改不了。浏览器窗口大小每次都可能不同，所以部分隐私方案会把窗口尺寸取整，减少这一项的信息量。

### 第三类：时区、语言与字体

- 读取方式：`Intl.DateTimeFormat().resolvedOptions().timeZone`、`new Date().getTimezoneOffset()`；`navigator.language` 和 `navigator.languages`；字体通过测量一段文字在不同字体下的渲染宽度来探测，或用 `document.fonts` 检查。
- 区分度：字体最高。装过设计软件、办公套件、开发工具的人，字体列表往往差别很大。时区和语言在同一地区内区分度低。
- 能否改变：语言和时区能在系统里改，字体可以卸载。这一类和 IP 的关系最紧：时区、语言和出口 IP 的地区对不上时，网站会注意到这一点。具体会暴露什么，可以看 [浏览器指纹与环境检测：时区、语言、字体和 IP 对不上，各自暴露了什么](/blog/browser-environment-consistency)。

### 第四类：Canvas、WebGL 与音频渲染

这是区分度最高、普通用户最难感知的一类。

- Canvas：网页在一块看不见的画布上画文字和图形，再用 `toDataURL()` 读出像素。不同显卡、驱动、系统字体渲染和抗锯齿设置，会让结果有细微差异。
- WebGL：通过 `WEBGL_debug_renderer_info` 扩展可以读到显卡厂商和型号字符串；再渲染一个 3D 场景取哈希，差异来自 GPU 与驱动。
- 音频：用 `OfflineAudioContext` 生成一段信号并处理，输出的浮点数会因音频栈实现不同而略有差别。
- 区分度：高。
- 能否改变：用户几乎改不了，除非换硬件或驱动。可行的做法是由浏览器统一返回结果，或者每次加入随机噪声，后面会讲。

### 第五类：自动化痕迹

- 读取方式：`navigator.webdriver` 是否为 true；是否存在无头浏览器特有的属性或缺失某些插件；窗口尺寸与屏幕尺寸关系是否异常；鼠标、键盘事件的节奏。
- 区分度：这一项不是用来区分个人，而是区分“人还是脚本”。
- 能否改变：普通用户一般不会命中。如果你用 Selenium、Playwright 做过测试，留在本机的配置有时会让日常浏览器也带上痕迹，可以用 /ip 确认一下。

## 用 cdnping /ip 自查：一份可以照做的步骤

[/ip](/ip) 的指纹检测在浏览器本地计算，不上传；生成结果图时可以选择隐藏 IP。建议按下面的顺序看：

1. 用平时最常用的浏览器打开 /ip，不要开无痕，先看日常状态。等各项检测跑完。
2. 看出口 IP 的地区和类型，记下 IP 所在国家和时区。机房 IP 和家宽 IP 的差别见 [机房 IP 和家宽 IP 有什么区别](/blog/datacenter-ip-vs-residential-ip)。
3. 对照“时区语言字体”：浏览器时区、系统语言和 IP 所在地是否一致。不一致不一定是问题，例如出差、使用公司网络，但你应该知道它存在。
4. 看“硬件指纹”：核心数、屏幕、显卡字符串是否和你的真实设备相符。显卡字符串显示为通用名称，通常说明浏览器做了统一处理。
5. 看“内核版本反推”：反推出的内核版本是否与 UA 一致。不一致多半来自 UA 修改扩展。
6. 看“自动化痕迹”：日常浏览器应当全部为否。
7. 顺手看 WebRTC 和 DNS 泄漏：它们不算指纹，但同样会暴露真实网络信息。原理见 [DNS 泄漏与 WebRTC 泄漏](/learn/dns-leak-webrtc-leak)，各浏览器的关法见 [WebRTC 泄漏怎么关](/blog/fix-webrtc-leak-chrome-firefox-safari)。
8. 换一个浏览器或打开无痕窗口再测一次，对比哪些项变了、哪些没变。没变的项，就是清 Cookie 也带不走的部分。

/ip 页面上每一项检测结果怎么读，可以对照 [浏览器环境检测怎么看：13 项检测逐项解读](/blog/browser-environment-check-explained)。各项的计算口径公开在 [数据方法](/methodology)。

## 自查结果怎么判断？

| 你看到的情况 | 可能的原因 | 要不要处理 |
| --- | --- | --- |
| 时区与 IP 地区不一致 | 用了代理或公司网络，系统时区未变 | 了解即可；涉及具体服务时遵守其条款 |
| UA 版本与反推内核不一致 | 装了改 UA 的扩展 | 不需要时建议卸载，它反而增加特殊性 |
| 字体数量明显偏多 | 装过设计、排版、开发软件 | 隐私敏感时可用单独的浏览器配置 |
| `navigator.webdriver` 为真 | 测试框架残留、启动参数 | 检查启动方式和扩展 |
| 显卡显示为通用名称 | 浏览器开启了指纹保护 | 正常 |

## 想降低可识别性，该怎么做？

这里的目标是出于隐私，减少被跨站追踪的可能，不是伪装成别人，也不是绕过网站的风控或地区限制。各平台的风控规则和服务条款仍然要遵守。

### 原则：变得“普通”比变得“随机”更有效

指纹识别靠的是“少见”。一台装了十几个小众扩展、改了 UA、自定义了一堆字体的浏览器，比一台默认设置的浏览器更好认。所以第一步通常是做减法：

- 卸载不用的扩展，尤其是会修改页面或请求头的扩展；
- 保持浏览器更新到当前稳定版，旧版本本身就是少数；
- 隐私要求高的浏览，单独用一个干净的浏览器配置，不装多余字体和扩展。

### 浏览器自带的指纹保护

- Firefox：在 `about:config` 中把 `privacy.resistFingerprinting` 设为 `true`。开启后时区会统一报告为 UTC，窗口尺寸会被取整，Canvas 读取可能弹出授权提示，部分 API 返回统一值。日常使用也可以先只开“增强型跟踪保护”的严格模式。
- Tor Browser：默认让所有用户呈现尽量相同的指纹，适合高隐私需求，代价是速度和兼容性。
- 其他浏览器：部分浏览器提供 Canvas、WebGL 结果随机化或在隐私窗口中限制指纹 API，具体以各自官方文档为准。

### 这些做法的代价

开启指纹保护后，你可能遇到：网页显示的时间按 UTC 计算、地图或日历时区错乱、Canvas 类在线工具和部分验证码异常、登录时被要求更多验证。遇到某个网站无法正常使用，可以针对该站单独放行，而不是全局关闭。

## 指纹和 IP，哪个更容易认出你？

两者是互补的。IP 告诉网站你从哪个网络来，指纹告诉网站你用的是什么设备。很多网站会同时看两者，再加上延迟特征判断你是否经过中转，原理见 [网站如何用延迟判断你在用代理](/blog/how-sites-detect-proxy-by-latency)。只处理其中一个，另一个依然可见。

如果你想把出口 IP、DNS、WebRTC、指纹和 API 连通性一次查完，可以按 [开发者网络自检清单（2026 版）](/blog/developer-network-self-check-2026) 走一遍。
