设备内存指纹使用 navigator.deviceMemory JavaScript属性读取你设备的大致RAM等级,并将其纳入你浏览器的唯一指纹——无需Cookie,无需权限,没有任何警告。你现在就可以在 whatsmy.fyi 上查看你的浏览器暴露了什么。
简短总结
navigator.deviceMemory 以GB为单位返回你设备的RAM,四舍五入到最近的2的幂:0.25、0.5、1、2、4或8 GB。这个粗粒度的桶值为你的浏览器指纹贡献大约2到3比特的熵。单独使用时无法唯一识别你,但与CPU核心数、屏幕分辨率、GPU详情和30多个其他信号结合后,它帮助商业指纹服务锁定你的设备。Firefox和Safari故意拒绝实现此API,只有基于Chromium的浏览器才会暴露它。
什么是设备内存指纹?
设备内存指纹是一种浏览器追踪技术,读取 Navigator.deviceMemory 属性——这是2017年12月Chrome 63引入的只读属性——来确定你的设备有多少RAM。该值故意不精确:拥有6 GB RAM的设备报告 8,拥有3 GB的设备报告 4,因为规范要求四舍五入到最近的2的幂。这种量化设计是为了限制指纹识别风险,但它创造了一个在浏览会话、无痕模式和VPN连接中持续存在的稳定一致信号。
该API是浏览器中更广泛硬件暴露属性家族的一部分,与 navigator.hardwareConcurrency(CPU核心数)和 navigator.platform 并列。每个单独提供的精度有限,但放在一起它们构建了 W3C指纹识别指南 明确分类为指纹向量的硬件档案。
与基于Cookie的追踪不同,设备内存指纹无法通过清除浏览器数据来阻止。它是追踪公司用来在网络上识别你的更广泛 浏览器指纹 工具包的一个组成部分。
navigator.deviceMemory是如何工作的?
W3C设备内存规范为你的浏览器报告的值定义了精确的算法。了解它揭示了为什么规范作者认为它是安全的,以及为什么指纹研究人员不同意。
第一步——读取物理内存
浏览器从操作系统读取设备的物理RAM(以字节为单位)。Chrome在 approximated_device_memory.cc 中的实现以MB读取该值,然后使用位移操作将其四舍五入到最近的2的幂。报告6,144 MB(6 GB)的设备被移至8,192 MB(8 GB)。
第二步——转换为GB并限制范围
四舍五入的MB值除以1,024得到GB数值。任何超过8的结果被限制为 8.0。非Android平台上较新的Chrome版本已将上限扩展到32,这意味着拥有64 GB RAM的工作站现在报告 32 而不是 8。
第三步——限制在HTTPS上下文中
规范规定 navigator.deviceMemory 仅在安全上下文(HTTPS)中可用。在HTTP页面上,该属性返回 undefined。这防止了通过明文连接的被动嗅探,但对绝大多数HTTPS网站上的指纹识别没有任何限制作用。
第四步——无需权限即可供脚本使用
页面上运行的任何JavaScript都可以在没有用户提示、没有权限请求、没有浏览器通知的情况下读取 navigator.deviceMemory。嵌入在数百万网站上的第三方分析和广告脚本在每次页面加载时静默读取它。
// 读取navigator.deviceMemory
// 返回值: 0.25 | 0.5 | 1 | 2 | 4 | 8(或在Firefox/Safari中为undefined)
const ram = navigator.deviceMemory;
console.log(ram); // 例如 8(在16 GB MacBook Pro上)
// 值的缺失本身也是一个指纹信号:
// undefined → 浏览器是Firefox、Safari或Tor Browser(非Chromium)
if (ram === undefined) {
console.log('检测到非Chromium浏览器');
}
// 指纹服务将其与CPU核心数结合
const hardwareProfile = {
deviceMemory: navigator.deviceMemory,
cpuCores: navigator.hardwareConcurrency, // 例如 10
platform: navigator.platform, // 例如 "MacIntel"
};
// 机器人检测: 标记超出规范的值
const VALID_VALUES = [0.25, 0.5, 1, 2, 4, 8, 16, 32];
const isOutOfSpec = ram !== undefined && !VALID_VALUES.includes(ram);
// 超出规范的值(如3、6、12)→ 高可信度欺骗或无头浏览器设备内存对指纹识别的贡献有多大?
量化的返回值意味着 navigator.deviceMemory 单独提供的熵有限——但它确实提供的信号是稳定且机器可读的。
| 信号 | 数值/发现 | 来源 |
|---|---|---|
| 香农熵(单独) | ~2–3 bits | W3C设备内存规范 |
| 标准桶值数量 | 6个(0.25, 0.5, 1, 2, 4, 8 GB) | W3C设备内存规范 |
| 全球浏览器支持率 | 76.37%(全部基于Chromium) | Can I Use,2025年 |
| Firefox / Safari支持 | 0%——故意未实现 | MDN Web Docs |
| 7天流量样本中超出规范的值 | 超过16,000个被标记为欺骗的事件 | Castle.io,2025年 |
| 与deviceMemory不一致相关的欺诈事件 | 约3,500起来自单一行为者 | Castle.io,2025年 |
| FingerprintJS开源中命名的信号源 | 约40个信号,包括deviceMemory | FingerprintJS GitHub |
navigator.deviceMemory 的实际指纹识别能力来自与其他硬件信号的结合。当浏览器报告 deviceMemory: 8、hardwareConcurrency: 10、platform: "MacIntel" 和特定的WebGL渲染器字符串时,组合档案足够具体,可以大幅缩小范围——且足够稳定,在会话间持续存在。
现实中谁在使用设备内存指纹?
商业指纹平台
FingerprintJS(被数百万网站使用的开源库)在其收集层中将 deviceMemory 明确列为命名信号源(getDeviceMemory),与 hardwareConcurrency、osCpu、cpuClass 和 architecture 并列。商业产品Fingerprint.com聚合了100多个浏览器和设备信号,设备内存是硬件档案层的一个组成部分。
机器人检测和欺诈防范
安全平台主要将 navigator.deviceMemory 作为一致性检查,而非追踪标记。反检测浏览器和无头自动化框架经常错误配置此属性——设置像 3、6 或 12 这样不是2的有效幂次的值,或超过标准最大值8的值。Castle.io在单个7天流量窗口中观察到超过16,000个超出规范的 deviceMemory 事件,其中约3,500个可追溯到运行伪造账户创建活动的单一恶意行为者。
行为广告网络
随着第三方Cookie在主要浏览器中被弃用,广告网络越来越多地将设备级信号——包括设备内存等级——纳入概率身份图。内存桶(入门级vs中端vs高端设备)也具有人口统计价值:报告0.25 GB的设备是超低端手机;报告8 GB的是高端笔记本或旗舰手机。
缺失本身也是信号
当 navigator.deviceMemory 返回 undefined 时,指纹脚本立即得知该浏览器不是基于Chromium的——确认是Firefox、Safari或Tor Browser。这个二元的存在/不存在区分本身具有识别价值,指纹库将其作为负面信号收集。
设备内存指纹合法吗?
根据GDPR,浏览器指纹创建了持久的唯一标识符,因此构成个人数据处理。法国数据保护机构CNIL明确表示,基于指纹的追踪需要与基于Cookie的追踪相同的知情同意。英国ICO于2025年1月确认,指纹识别受到与Cookie相同的PECR要求约束。根据加利福尼亚州的CCPA和CPRA,浏览器指纹作为需要退出权的唯一个人标识符。
一个重要的法律例外是欺诈检测和机器人防范。仅使用 navigator.deviceMemory 来检测欺骗或不一致信号——而非跨站追踪个人——的平台通常符合GDPR的合法利益条款,无需明确同意。
在中国,根据《个人信息保护法》(PIPL),通过设备内存等硬件属性构建持久标识符属于个人信息处理,须依法告知用户并取得同意。欺诈防范场景可主张特定目的,但需在隐私政策中明确说明。
如何保护自己免受设备内存指纹追踪
保护选项从近乎完整(有网页兼容性取舍)到减少追踪面而不破坏网站的轻量级缓解措施不等。
- Tor Browser(最强保护):基于Firefox,因此
navigator.deviceMemory原生返回undefined——该API未实现。结合letterboxing、用户代理标准化和通过Tor匿名网络的网络路由,Tor Browser提供了对设备级指纹识别最强的现实世界保护。代价是浏览速度较慢和偶尔的CAPTCHA摩擦。 - Firefox(推荐日常使用):Firefox根本不实现
navigator.deviceMemory。在about:config中启用privacy.resistFingerprinting还可以标准化屏幕大小、时区、语言和字体指标。这种组合提供强大的硬件指纹抗性,而无需Tor的网络开销。 - Brave Browser(基于Chromium的保护):Brave实现了该API(Chromium代码库),但应用每个会话、每个网站的随机化——称为Farbling的技术。你报告的
deviceMemory值在网站之间和会话之间不同,防止跨站链接。注意,统计分析在某些条件下可以击败随机化,使Brave在此特定信号上的鲁棒性低于Firefox。 - Safari:与Firefox一样,Safari拒绝实现该API。在2025年的所有Safari版本中,
navigator.deviceMemory返回undefined。这是有意为之——Apple的WebKit团队历来对通过Web API暴露硬件细节持谨慎态度。 - Chrome配合扩展:JShelter或CanvasBlocker等扩展可以覆盖
navigator.deviceMemory以返回固定或随机化的值。请注意,在Chromium浏览器中将其覆盖为undefined会创建自己的异常信号——指纹脚本期望该属性在Chrome中存在,因此其在Chrome用户代理中的缺失是可疑的。 - 了解VPN的限制:VPN改变你的IP地址并通过加密隧道路由流量,但对
navigator.deviceMemory没有任何影响。该值由浏览器中运行的JavaScript从本地硬件读取,不涉及网络。在 whatsmy.fyi 上检查你的IP是否被正确屏蔽,但使用抗指纹浏览器来解决设备内存追踪问题。
常见问题
navigator.deviceMemory在无痕或隐私模式下有效吗?
有效。隐私浏览防止浏览器将历史记录和Cookie写入磁盘,但它不改变你的RAM或Chrome报告它的方式。navigator.deviceMemory 在无痕窗口和普通窗口中返回相同的值。只有不实现该API(Firefox、Safari)或主动修改它(Brave)的浏览器才会有不同表现。
Firefox和Safari为什么拒绝实现navigator.deviceMemory?
两个团队都得出结论,指纹识别成本超过了开发者便利利益。W3C设备内存存储库上的一个GitHub issue认为"RAM数量是指纹向量",并呼吁浏览器制造商"在实施此提案前三思"。Firefox和Safari采取了这一立场;Chrome和Edge没有。结果是76%的全球浏览器流量暴露该值,而Firefox和Safari用户(约24%)不暴露。
navigator.deviceMemory能用来识别个人用户吗?
单独不能。只有六个标准桶值,且重度偏向4和8 GB(反映现代硬件分布),navigator.deviceMemory 单独提供大约2到3比特的熵——远低于个人识别阈值。然而,与CPU核心数、GPU渲染器字符串、屏幕分辨率、时区和已安装字体结合后,复合硬件指纹可以在大型数据集中达到等同Cookie的识别精度。
什么是Device-Memory HTTP客户端提示?
除JavaScript API外,设备内存规范还定义了 Sec-CH-Device-Memory HTTP请求头。当服务器发送 Accept-CH: Device-Memory 时,Chrome会将设备内存桶作为头信息附加到后续请求中——在任何JavaScript运行之前。这意味着服务器可以从每个HTTP请求中读取你的RAM等级,无需执行一行JavaScript。该头信息在Chrome 61中默认启用,比JavaScript API在Chrome 63中发布早两个版本。
机器人检测系统如何使用navigator.deviceMemory?
机器人检测平台主要将该值用作一致性信号,而非追踪标记。它们将 navigator.deviceMemory 与报告的用户代理、平台字符串和CPU核心数交叉验证。反检测浏览器和无头自动化框架经常设置无效值——预期范围之外的2的幂次,或像3或6 GB这样的非2的幂次值——这些值很容易被标记为欺骗。真正的Chrome 120浏览器在MacBook Pro上总是报告有效且合理的组合;配置错误的无头浏览器通常不会。
设备内存指纹与硬件指纹是一样的吗?
设备内存指纹是硬件指纹的一个子集。更广泛的硬件指纹类别还包括CPU核心数(navigator.hardwareConcurrency)、通过 WebGL指纹 的GPU身份、屏幕分辨率和像素密度,以及通过 音频指纹 读取的音频硬件特征。这些信号共同构建了一个基本免疫于私人浏览或Cookie删除等软件级隐私措施的硬件档案。
使用注重隐私的DNS或广告拦截器有帮助吗?
DNS级别的拦截器和广告拦截器可以防止将你的指纹传输到追踪服务器的网络请求。如果第三方指纹脚本被阻止加载,它就无法执行,也无法读取 navigator.deviceMemory。然而,直接嵌入在网站自己代码中的第一方脚本不会被典型的广告拦截器阻止——它们被视为网站本身的一部分。随着第三方Cookie消失,越来越常见的第一方指纹识别完全绕过了广告拦截器的保护。
相关文章
- 什么是浏览器指纹?网站如何在不使用Cookie的情况下追踪你 ——所有指纹信号及其组合方式的完整指南
- 什么是CPU指纹?navigator.hardwareConcurrency如何识别你 ——deviceMemory的姊妹API,暴露你的CPU核心数
- 什么是WebGL指纹?你的GPU如何识别你的浏览器 ——3D图形API如何暴露你的GPU供应商、型号和驱动版本
- 什么是Canvas指纹识别?网站如何在不使用Cookie的情况下追踪你 ——GPU的像素渲染如何通过Canvas API创建唯一标识符
- 什么是音频指纹?AudioContext如何追踪你的浏览器 ——你设备的音频硬件如何产生唯一的声学指纹



