在线工具集

浏览器与设备指纹:能查到什么 / 怎么用 / 隐私边界

浏览器指纹由 UA、屏幕分辨率、时区、Canvas 指纹等组成。学会用 navigator 对象提取设备信息,理解隐私模式的防护范围,以及金融反欺诈中的常见信号。

✍️ XTechTools 编辑团队 · 📅 发布 2026-04-29 · 🔄 更新 2026-06-14 · ⏱ 约 27 分钟阅读 ·→ 立即使用 浏览器信息

每个浏览器和设备都有独特的特征组合——屏幕分辨率、字体列表、浏览器版本、时区、语言、甚至 GPU 型号。这些特征可以组合起来生成一个"设备指纹",用于识别用户(不需要 Cookie 或登录)。金融公司用它风控反欺诈;广告网络用它追踪用户;隐私卫士则视其为威胁。本指南讲清楚浏览器能向网站泄露什么信息、怎么用 JavaScript 获取、如何用隐私模式防护,以及合规边界。

浏览器指纹的全面组成与信息泄露

一个设备指纹通常包含以下要素。某些是被动收集(网站能立即看到),某些需主动请求(需要 JavaScript)。

被动收集(无需用户权限,自动泄露): - User-Agent(UA):浏览器标识字符串,包含浏览器类型、版本、操作系统。例如 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Chrome/120.0.0.0) Safari/537.36。从中可以推断出操作系统版本、是否是移动设备、GPU 等。 - Accept-Language HTTP Header:接受的语言列表,如 zh-CN,zh;q=0.9,en;q=0.8。直接泄露用户的语言偏好和地理位置线索。 - 时区偏移:JavaScript 获取 new Date().getTimezoneOffset(),如 +8:00(北京)或 -5:00(纽约)。精确定位用户所在时区。 - 屏幕分辨率window.screen.width / height,如 1920×1080。不同设备的分辨率分布明显不同(Mac Retina 通常 2560×1600,廉价安卓手机 720×1280)。 - 颜色深度window.screen.colorDepth,如 24 bit 或 32 bit。某些特殊设备(如某些医疗设备)用 16 bit。 - 设备像素比window.devicePixelRatio,如 2.0(Retina/高清屏)或 1.0(普通屏)。iPhone 通常 2-3,高端安卓 2-3,廉价设备 1-1.5。 - 时间精度细节Performance.now() 能精确到微秒。浏览器的时钟精度和 JavaScript 引擎特征透露 CPU 型号。 - HTTP Accept Header:浏览器支持的内容类型,如 text/html,application/xhtml+xml,...。不同浏览器列表顺序不同。

需主动请求的信息: - Canvas 指纹:在 canvas 上绘制文本或图形,不同 GPU/OS 的渲染结果(抗锯齿算法、色彩准确度、字体渲染)有微妙差异,形成唯一签名。两个相同配置的设备也可能产生略有不同的 Canvas。 - WebGL 指纹:查询 WebGL 支持的扩展、着色器精度、最大纹理大小等。GPU 型号直接影响这些参数。Intel HD Graphics 和 NVIDIA GTX 返回的值完全不同。 - 字体列表(需插件扩展检测):系统已安装的字体集。例如设计师电脑的字体集(可能有 500+ 字体)与普通用户(可能只有 30 个系统字体)完全不同。 - 插件列表(现代浏览器已不支持):Flash、Java applet 等。早期常用于指纹识别,现已被禁用。 - IP 地址:服务器日志直接看到,虽不算"指纹"但同样有识别价值。每次拨号 IP 可能变化,但办公室固定 IP 几年不变。 - 请求头顺序:不同浏览器发送 HTTP header 的顺序不同。Chrome 通常是 Host, Connection, Upgrade, ...; Firefox 顺序略有不同。 - TLS 指纹:HTTPS 握手时的密码套件顺序。JA3 库能识别浏览器类型。

指纹稳定性: - 永久不变:UA、屏幕分辨率、Canvas/WebGL 指纹 - 临时变化:时区(出国旅游时变化)、语言(改浏览器设置后变化) - 完全随机:网络延迟、带宽(每次不同)

navigator 对象与 JavaScript 获取设备信息

JavaScript 的 navigator 对象提供浏览器和设备信息,是收集指纹的关键 API。以下是常用属性和完整示例:

基础信息: `` navigator.userAgent // "Mozilla/5.0..." navigator.language // "zh-CN" navigator.languages // ["zh-CN", "zh", "en"] navigator.platform // "Win32" / "MacIntel" / "Linux x86_64" navigator.hardwareConcurrency // 逻辑 CPU 核心数,如 8 navigator.deviceMemory // RAM 大小(GB),如 8(需权限) navigator.maxTouchPoints // 触屏点数,0 = 非触屏设备 ``

网络与地理信息: `` navigator.onLine // true / false,是否在线 navigator.connection.downlink // 下行带宽(Mbps),如 10.5 navigator.connection.rtt // 网络延迟(毫秒),如 50 navigator.connection.effectiveType // "4g", "3g", "2g" ``

权限管理(需用户授权): ``` navigator.permissions.query({ name: "geolocation" }) .then(result => console.log(result.state)) // "prompt" / "granted" / "denied"

navigator.permissions.query({ name: "camera" }) .then(result => console.log(result.state)) ```

Canvas 指纹实现(简化版): `` function getCanvasFingerprint() { const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d"); ctx.textBaseline = "top"; ctx.font = "14px Arial"; ctx.textAlign = "left"; ctx.fillStyle = "#f60"; ctx.fillRect(125, 1, 62, 20); ctx.fillStyle = "#069"; ctx.fillText("Browser Fingerprint Test 🚀", 2, 15); ctx.fillStyle = "rgba(102, 204, 0, 0.7)"; ctx.fillText("Browser Fingerprint Test 🚀", 4, 17); return canvas.toDataURL(); // 返回 Base64 PNG } ``

WebGL 指纹实现(简化版): `` function getWebGLFingerprint() { const canvas = document.createElement("canvas"); const gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl"); if (!gl) return "Not Supported"; const debugInfo = gl.getExtension("WEBGL_debug_renderer_info"); const vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL); const renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL); return vendor + ":" + renderer; // 如 "Google Inc.:ANGLE (Intel HD Graphics 630)" } ``

完整指纹生成(hash 多维度): `` const fingerprint = { ua: navigator.userAgent, lang: navigator.language, tz: new Date().getTimezoneOffset(), screen: window.screen.width + "x" + window.screen.height, dpr: window.devicePixelRatio, canvas: getCanvasFingerprint(), webgl: getWebGLFingerprint() }; // 对 JSON.stringify(fingerprint) 做 SHA256,得到唯一 hash ``

结合这些维度,指纹唯一性几乎 100%。

IP 地址与用户身份的复杂关系

网站能从 HTTP 请求的源 IP 推断用户地理位置和身份。但 IP 与用户的对应关系并不是一对一的,这使得基于 IP 的追踪有局限性。

IP 来源的多样性: - 家庭 ISP(运营商分配):相对稳定(数周至数月不变)。ISP 会在定期重启路由器时重新分配 IP,但通常在固定的 IP 池内。可以用 whois 查询 ISP。 - 手机移动网络(4G/5G):经常变化。用户越狱下飞机、换到另一个城市、从 WiFi 切换到 4G,IP 都会变。 - 办公室固定 IP:稳定(多年不变),但被多人共享。同一 IP 可能是 100 个员工。 - VPN / 代理:IP 完全虚假,隐藏真实地址。企业 VPN 让所有员工看起来都来自总部 IP。 - 企业内网(NAT):多人共享同一公网 IP。同一 IP 来自 1000 个不同用户。 - 数据中心机房:云服务器共享 IP 段。多个不同客户的虚拟机来自相邻 IP。

反向地理定位的准确性: - MaxMind GeoIP 数据库(使用最广泛):IP 定位精度在城市级 70-80%,省级 95%+ - ISP 级数据库准确度更低,尤其对于移动运营商 - VPN 或代理会导致完全错误的定位

与浏览器指纹的配合: - IP 单独使用准确性低(一个 IP 可能代表多人,一个用户可能有多个 IP) - IP + 浏览器指纹能大大提高识别准确度。例如支付宝的风控:同一 IP 出现 3 个完全不同的浏览器指纹(Canvas、WebGL、UA)→ 可能是 IP 被盗、被黑客登录 - IP 变化(从北京突然到深圳)+ 指纹相同 = 用户出差或旅游 - IP 不变 + 指纹完全改变 = 可能是黑客劫持账户

Cookie 与 LocalStorage:追踪的两条路线

两者都能在浏览器本地存储用户信息,但工作机制和追踪方式完全不同。理解区别对隐私和安全至关重要。

Cookie 的机制: - 由服务器通过 Set-Cookie HTTP header 写入 - 每次 HTTP 请求自动包含在 Cookie header 中(除了跨域限制) - 可设置过期时间(Session Cookie 浏览器关闭即删;Persistent Cookie 有过期时间) - 受 HttpOnly 标志保护可防止 JavaScript 访问(提高安全性) - 受 Secure 标志限制仅 HTTPS 传输 - 子域名共享:example.com 的 Cookie 在 api.example.com 也能访问 - 第三方 Cookie:广告商 ads.com 在用户访问 news.com 时放的 Cookie,可以追踪用户在多个网站的行为

LocalStorage 的机制: - 由 JavaScript 显式写入(localStorage.setItem(key, value)) - 不自动发送到服务器,需主动读取并包含在请求中(如 headers 或 body) - 永久存储(直到显式删除或浏览器清缓存) - 无 HttpOnly、Secure 等安全标志 - 容量更大(通常 5-10MB vs Cookie 的 4KB 限制,当然单个 Cookie 的限制更小) - 同源策略更严格(不同子域的 localStorage 完全隔离)

追踪角度的对比: - Cookie 更容易被追踪(HTTP 自动发送),跨域追踪相对容易(通过第三方 Cookie) - LocalStorage 隐蔽性更强(需要网站 JavaScript 主动读取),跨域隔离更严格(无法跨域访问) - 现代隐私浏览器(如 Firefox)默认分离第三方 Cookie(同一用户在不同网站看起来是不同用户) - Safari 更激进,直接禁用第三方 Cookie,只允许同站 Cookie

Session vs Persistent Cookie: - Session Cookie:浏览器关闭就删除(无过期时间),用于登录状态、临时会话 - Persistent Cookie:有过期时间(如 30 天),即使关闭浏览器也保留,下次打开自动恢复 - 持久 Cookie 的生命周期可达数年,是被网站追踪的主要手段

现实场景: - Google Analytics 用 _ga Cookie 追踪你在 1000+ 网站的行为(都通过 Google Analytics 脚本) - Facebook Pixel 用第三方 Cookie 追踪非 Facebook 网站上的用户 - 电商网站用 LocalStorage 存储购物车,这样清 Cookie 也不会丢失购物车(提高用户体验)

隐私模式(无痕浏览)的真实防护范围

隐私模式(Chrome 无痕式、Safari 私密浏览、Firefox 私密窗口)常被误解为"隐身斗篷",实际上防护范围很有限。

隐私模式的作用(本地隐私): - 浏览历史、下载记录不保存 - Cookie 和 LocalStorage 在窗口关闭时自动清空 - 自动填充数据(密码、地址)不记录 - 搜索历史不保存

隐私模式无法挡住(网络层追踪): - User-Agent:照常发送,网站立即知道你用 Chrome 120 - 屏幕分辨率、时区、语言:照常发送 - Canvas / WebGL 指纹:照常生成,唯一性不变 - IP 地址:ISP 和网站服务器照样看到,知道你来自哪个城市 - 登录账号:如果你主动登录 Google/Facebook,他们照样知道你是你,隐私模式不改变这一点 - 第三方追踪器:Google Analytics、Facebook Pixel 照样追踪(只要网站嵌入了脚本)

  1. 你登录了 Google 账号 → Google 知道你看过什么
  2. 这些网站用 Google Analytics → Google 知道你看过什么
  3. 网站在 Facebook 上投放了广告 → Facebook 知道你访问过医学网站

所以"无痕"只是对家人隐藏,对网站和运营商毫无用处。

真正的隐私方案: - 使用 VPN / Tor:隐藏 IP,让网站看不到真实地址(但 VPN 提供商能看到) - 用浏览器指纹阻止工具:如 uBlock Origin 的 Canvas 指纹保护、Privacy Badger - 禁用第三方 Cookie:浏览器设置或 Privacy Badger 插件 - 定期清空 Cookie:或设置自动清除(浏览器设置) - 用不同的用户名 / 邮箱注册不同服务:隔离身份,让网站无法关联你的多个账户 - 使用隐私搜索引擎:DuckDuckGo、Startpage 不追踪搜索历史

重要提示:不存在"完全无痕"。隐私模式只是清了本地痕迹,网络层的追踪无法阻止。只有 VPN + 工具组合才能显著降低被追踪的风险。

金融反欺诈中的风控信号与实战应用

银行和支付宝等金融公司用浏览器指纹和设备信息来检测欺诈。理解这些信号有助于理解为什么出差时转账需要二次验证。

常见的风控信号(评分制,单个信号权重不同):

  1. 新设备登录:同一账号,突然出现新的浏览器指纹(Canvas/WebGL/UA 都不同)。权重高。
  2. 地理位置异常:IP 显示在深圳,但 5 分钟后突然在北京(物理上不可能,说明被盗号或 VPN)。权重非常高,通常直接拒绝交易。
  3. 时间异常:账号在凌晨 3 点忽然活跃(常人睡觉时间),且 IP 或设备不同。权重中等。
  4. 批量异常:同一 IP 短时间内创建多个账号,或登录多个账号(可能是黑客扫号)。权重高。
  5. 网络环境异常:从家庭宽带(稳定 IP)突然换成移动 4G(经常变 IP),再换成企业网络(又是另一个 IP)。权重中等。
  6. 设备环境异常:Screen.devicePixelRatio 从 2.0(正常 iPhone)变成 1.0(可能是模拟器或被篡改),或 Canvas 指纹从未见过。权重高。
  7. 时区和语言冲突:IP 在深圳(+8 时区),但浏览器时区设置为 UTC-5(美国)且语言是英文,Canvas 指纹显示这是一个 Windows 系统。不匹配,可疑。
  8. 浏览器太新或太旧:UA 显示安装日期为 2 周前(刚下的浏览器,可能是黑客用来绕过风控),或 User-Agent 是 2016 年的过时版本。权重中等。
  9. 登录失败多次:同一 IP 或设备尝试登录 5 次以上失败(暴力破解)。权重高,通常锁定账户。
  10. 支付金额异常:历史平均单笔 500 块,今天突然转账 50000。权重中等,可能要求输入动态码。
  11. 收款方异常:首次转账给新联系人,或转账给境外账户。权重中等。
  12. 账户关联异常:多个账户共享相同 Canvas 指纹、IP 段但绑定不同身份。权重非常高。

风控评分模型:各因素加权求和(权重算法保密)。超过阈值就要求二次认证(短信验证码、人脸识别、安全问题)或直接拒绝交易。

对用户的实际影响: - 旅游出国(IP 突然变化)→ 触发二次验证 - 换手机(设备指纹完全改变)→ 需要刷身份证或人脸识别 - 家里网络故障,用手机热点(IP 和网络环境同时变化)→ 可能被拒绝交易 - 公司 VPN 登录(IP 变化)→ 需要二次验证

这些都是"假阳性"(正常用户被误判),但为了防欺诈不得不接受这种干扰。

GDPR、PIPL 与隐私合规的现实困境

欧盟 GDPR(通用数据保护条例)和中国 PIPL(个人信息保护法)都严格限制用浏览器指纹识别用户。企业面临合规与风控的两难。

GDPR 的要求(欧盟及访问欧盟用户的网站必须遵守): - 收集设备指纹属于"个人数据处理",需明确的用户同意(Consent)。不能默认收集。 - 必须提供 Opt-Out 选项(cookie banner),用户有权拒绝非必要追踪 - 用户有权查看被收集的数据、删除数据、数据可移植性(要求网站提供导出) - 违规罚款可达全球年收入 4% 或 2000 万欧元,哪个更大。例如 Amazon 因数据处理违规被罚 7.46 亿欧元 - 数据保护官(DPO)职位是强制的,大公司必须配备

PIPL 的要求(中国及收集中国用户数据的网站): - 须"明确、具体地"告知用户收集何种信息、用于何种目的(条款中要列出 Canvas 指纹、WebGL 等具体项目) - 用户信息与个人身份的关联一经知晓,就属于"个人信息"("个人信息"定义宽泛) - 收集敏感个人信息(如生物识别、指纹数据)需获得单独同意 - 用户有权删除个人信息(但与风控需求冲突:删除后黑客指纹记录也删了,无法追踪) - 违规罚款最高 1000 万元或 5% 年收入 - 跨国传输数据需额外审批("出国数据"管制)

实际影响: - 欧美网站一打开就弹 cookie banner("我们用 Cookie 追踪你,同意吗?"),拒绝后网站功能受限 - 中文网站需在隐私政策里详细列举收集的设备信息用途(如风控、反欺诈、用户分析) - 不能默认收集 Canvas/WebGL 指纹,需要用户主动同意 - 用户有权要求删除指纹数据,但删除后网站无法识别黑客

  1. 明确披露追踪政策,获得用户同意
  2. 给用户一个隐私控制面板,允许关闭某些追踪
  3. 风控失败时允许用户申诉和恢复
  4. 对正常用户减少打扰(提高阈值)
  5. 为隐私卫士提供选项(如禁用指纹识别),接受更多风险

展望:隐私法律会越来越严格,企业最终会转向基于显式登录的身份验证(减少被动识别)。

浏览器厂商与网站的军备竞赛

浏览器厂商(Chrome、Safari、Firefox)在逐步提升隐私保护,限制网站的追踪能力。与此同时,网站为了反欺诈和广告投放,在寻找新的追踪手段。这是一场不对等的军备竞赛。

浏览器的防护措施(保护用户): - Chrome:即将弃用 Third-Party Cookie(已推迟多次,原定 2026 中期)。转向 Privacy Sandbox 新 API(Federated Learning of Cohorts, Topics API)。 - Safari:已全面禁用 Third-Party Cookie(2024 年)。对 Canvas/WebGL 指纹加入随机噪声。 - Firefox:默认分离 Third-Party Cookie(不同网站的 Cookie 隔离)。对 Canvas 绘制加入噪声。 - 所有浏览器:对 Canvas/WebGL 指纹有不同程度的混淆(如加入随机噪声,使指纹变化) - Chrome 隐私沙箱:用聚合数据替代个人追踪("联邦学习")

网站的绕过手段(对抗防护): - First-Party Cookie:用自己域名的 Cookie 替代第三方 Cookie。Google Analytics 4 已迁移到 First-Party。 - Server-Side Fingerprinting:把指纹计算移到服务器(从 IP、HTTP header 顺序等推测身份)。TLS 指纹(JA3)可以识别浏览器类型,不需要 JavaScript。 - 更复杂的 Canvas 指纹:修改绘制方式、使用隐形文本,让浏览器的噪声混淆失效。 - 跨域追踪:通过 localStorage、IndexedDB、Service Worker 等浏览器存储跨域存储追踪令牌。 - 网络协议层追踪:CNAME Cloaking(使用别名指向第三方服务),使浏览器认为是同站请求。

未来趋势: - 指纹识别会越来越难(浏览器加噪声、混淆),准确率下降 - First-Party Cookie 和 Server-Side Fingerprinting 会成为主流(基于登录和网络信息) - 身份验证会更依赖显式登录(减少被动识别),付费应用会要求账户注册 - 付费用户会获得更少的追踪干扰(如 Premium YouTube 无广告,Netflix 无追踪) - 隐私和便利会变成付费功能("Privacy as a Premium Feature")

  1. 用 uBlock Origin 或 Privacy Badger 阻止第三方 Cookie 和脚本
  2. 定期清 Cookie(浏览器设置或定时脚本)
  3. 用不同浏览器访问不同网站(隔离指纹)
  4. 登陆账号时用复杂密码和二次认证
  5. 定期检查隐私政策和数据权限

常见问题

Canvas 指纹一定是唯一的吗?

几乎唯一,但不是绝对的。相同 OS、GPU、浏览器版本的设备可能生成相同 Canvas 指纹。但结合 WebGL、屏幕分辨率、UA 等 10+ 维度后,唯一性达 99.9%+。百万设备中重复概率 < 0.01%。

用 VPN 能完全隐藏浏览器指纹吗?

不能。VPN 只隐藏 IP;Canvas 指纹、屏幕分辨率、UA、时区照常发送。需要同时用浏览器指纹阻止工具(如 uBlock Origin)和 VPN 才能有效降低被追踪风险。

GDPR 下网站怎样合法追踪用户?

需要显式的用户同意(cookie banner,明确告知会收集什么)。用户拒绝后必须停止非必要追踪,但可以继续使用必要的 Cookie(如登录 token、安全 token)。用户可以随时撤回同意。

我的浏览器指纹被盗了怎么办?

指纹本身是统计特征,无法"被盗"。但网站可能记录了你的指纹 + IP 组合。换浏览器、更新系统、清浏览器缓存、改系统时区,都会改变指纹,降低被识别的风险。黑客无法伪造你的指纹。

支付宝查到我用了 VPN 吗?

支付宝看不到 VPN 本身,但能看到 IP 突然变化(国内 → 国外 → 国内)、时区异常(IP 在深圳但时区是美国)、Canvas 指纹和浏览器 UA 不匹配等信号,可能会触发风控要求二次验证。