如何将 BrowserScan 与 UAParser.js 结合用于浏览器审计

BrowserScan 实时展示网站可以观察到你的浏览器的哪些信息。UAParser.js 将原始 User-Agent 字符串和 Client Hints 转换为代码可操作的结构化字段。两者结合使用,可以填补任一工具单独无法覆盖的空白:BrowserScan 告诉你暴露了什么,而 UAParser.js 告诉你这些暴露信息在服务器端如何被解读。

本文介绍工作流程、设置步骤、实际示例以及这种组合解决的问题。

为什么将 BrowserScan 与 UAParser.js 配对使用?

uaparser.dev 首屏截图

uaparser.dev 首屏截图。

BrowserScan 是一个免费的在线工具,用于分析浏览器指纹和隐私泄漏。它会报告你的 IP 地址、时区、位置、ISP、代理状态、黑名单状态以及指纹真实性评分。它还运行机器人检测信号,如 WebDriver 和 CDP 指标,以及 DNS 泄漏、WebRTC 泄漏、Canvas 指纹、插件、客户端提示和浏览器内核检查。

UAParser.js 是一个 JavaScript 库和 REST API,用于从 User-Agent 字符串和 Client Hints 中检测浏览器、操作系统、设备、CPU 架构、应用、机器人和 AI 爬虫。它返回结构化的客户端洞察,如浏览器名称和版本、操作系统名称和版本以及设备类型。它压缩并 gzip 后约 11.9 kB,通过 npm 分发,可在浏览器和 Node.js 中运行。

这两个工具回答不同的问题:

  • BrowserScan 回答:这个浏览器现在能揭示我的哪些信息?
  • UAParser.js 回答:服务器将如何分类这个浏览器发送的信号?

隐私审计需要这两个答案。在浏览器中看起来干净的指纹仍可能被解析器错误分类,而解析器的准确性取决于它接收到的信号。

组合工作流程一览

  1. 建立浏览器基线。 运行 BrowserScan 以捕获你的指纹、泄漏结果和机器人信号。
  2. 捕获原始信号。 记录 navigator.userAgent 和浏览器发送的 Sec-CH-UA-* 标头。
  3. 解析它们。 将这些信号输入到客户端或服务器端的 UAParser.js 中。
  4. 比较。 检查解析出的浏览器、操作系统和设备是否与 BrowserScan 报告的一致。
  5. 修复或记录。 调整配置、标头或测试预期,然后重新运行两个工具。

步骤 1:运行 BrowserScan 基线

www.browserscan.net 首屏截图

www.browserscan.net 首屏截图。

打开 BrowserScan 并首先运行主指纹测试。注意以下内容:

  • 报告的浏览器名称和版本、操作系统和设备类型
  • 指纹真实性评分
  • 机器人检测信号(WebDriver、CDP、navigator 属性)
  • 客户端提示值(如果你的浏览器发送它们)
  • DNS 和 WebRTC 泄漏结果,以及 IP、时区和代理状态

保存截图或导出这些值。这是你后续每次比较的参考点。

如果你正在审计代理或 VPN 设置,请在更改任何内容之前也运行泄漏测试。要更深入地了解 IP 级别的暴露,请参阅用于浏览器指纹隐私的批量 IP 分析。

步骤 2:捕获原始信号

在浏览器控制台中,收集代码将要解析的字符串:

js 复制代码
console.log(navigator.userAgent);
console.log(navigator.userAgentData?.brands);
console.log(navigator.userAgentData?.mobile);

在服务器端,记录传入的请求标头:

js 复制代码
console.log(req.headers['user-agent']);
console.log(req.headers['sec-ch-ua']);
console.log(req.headers['sec-ch-ua-platform']);
console.log(req.headers['sec-ch-ua-mobile']);

这些是 UAParser.js 使用的相同输入。保留副本可以使不匹配可重现。

步骤 3:设置 UAParser.js

www.browserscan.net 首屏截图

www.browserscan.net 首屏截图。

客户端设置

安装包或从 CDN 加载:

bash 复制代码
npm install ua-parser-js
html 复制代码
<script src="https://cdn.jsdelivr.net/npm/ua-parser-js/dist/ua-parser.min.js"></script>

然后解析当前浏览器:

js 复制代码
const uap = new UAParser();
const result = uap.getResult();
console.log(result.browser); // { name, version, major, type }
console.log(result.os);      // { name, version }
console.log(result.device);  // { model, type, vendor }
console.log(result.cpu);     // { architecture }

使用客户端提示的服务器端设置

自 v2.0.0 起,UAParser.js 可以接受 Client Hints 以及 User-Agent 标头。Client Hints 仅在安全上下文(localhost 或 HTTPS)以及基于 Chromium 的浏览器版本 85 及以上中有效:

js 复制代码
const http = require('http');
const uap = require('ua-parser-js');

http.createServer(function (req, res) {
  const hints = 'Sec-CH-UA-Full-Version-List, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version, Sec-CH-UA-Arch, Sec-CH-UA-Bitness';
  res.setHeader('Accept-CH', hints);
  res.setHeader('Critical-CH', hints);

  const result = uap(req.headers).withClientHints();
  res.end(JSON.stringify(result, null, 2));
}).listen(1337, '127.0.0.1');

有关完整的 API 接口,请参阅 UAParser.js 文档 和 HTML 快速入门。

步骤 4:比较 BrowserScan 和 UAParser.js 的输出

www.browserscan.net 首屏截图

www.browserscan.net 首屏截图。

将两份报告并排放置。下表展示了匹配和不匹配的样子。

信号 BrowserScan 显示 UAParser.js 返回 不匹配意味着什么
浏览器 Chrome 139 browser.name: "Chrome", version: "139.0.0.0" 伪造或重写的 User-Agent
操作系统 macOS 15.6 os.name: "macOS", version: "15.6" 客户端提示和 User-Agent 不一致
设备类型 桌面 device.type: "desktop" 移动模拟或修改过的字符串
机器人信号 检测到 WebDriver isBot() 返回 true 自动化对两层都可见

UAParser.js 还暴露了辅助方法,如 isChromeFamily()、isBot() 和 isAICrawler()。使用它们以与后端相同的方式对流量进行分类。

示例:捕获伪造的 User-Agent

假设 BrowserScan 报告 Windows 上的 Firefox,但你的服务器日志显示带有 Linux 平台提示的 Chrome User-Agent。解析请求标头:

js 复制代码
const { browser, os } = uap(req.headers).withClientHints();
if (browser.name === 'Chrome' && os.name === 'Windows') {
  // 标记:浏览器报告和服务器解析不一致
}

这种不一致正是指纹识别系统寻找的不一致性类型。BrowserScan 从浏览器端揭示它;UAParser.js 从服务器端揭示它。

步骤 5:验证机器人和自动化检测

BrowserScan 的机器人检测检查 WebDriver、CDP 和 navigator 属性。UAParser.js 通过分类已知的机器人和 AI 爬虫 User-Agent 字符串增加了第二层。对同一环境运行两者:

  • 如果 BrowserScan 标记自动化但 UAParser.js 看到正常的浏览器字符串,则自动化正在隐藏其 User-Agent。
  • 如果 UAParser.js 标记机器人但 BrowserScan 显示干净的浏览器信号,则客户端可能是具有重写字符串的无头浏览器。

在信任测试环境之前,这两种模式都值得调查。

步骤 6:更改后重新测试

调整标头、代理设置或浏览器配置后,重复循环:BrowserScan 基线、原始信号捕获、UAParser.js 解析、比较。保留之前的结果,以便查看哪个更改移动了哪个信号。

这种组合解决的问题

  • 隐私审计中的盲点。 BrowserScan 显示暴露;UAParser.js 显示解读。它们共同覆盖请求的两端。
  • 欺骗检测。 将解析输出与浏览器报告的值进行比较,可以揭示单个工具遗漏的不一致性。
  • 分析准确性。 按浏览器或设备细分流量的团队可以对照实时指纹报告验证其解析器。
  • 机器人分类。 两个独立信号使自动化检测比单独任何一个更可靠。
  • 客户端提示调试。 BrowserScan 显示发送了哪些提示;UAParser.js 显示它们如何被读取。

何时使用一个工具而不是两个

当你只需要快速隐私检查、泄漏测试或指纹真实性评分时,单独使用 BrowserScan。它无需设置。

当你构建分析、个性化或流量分类,并且不需要审计浏览器自身的暴露时,单独使用 UAParser.js。

当你验证隐私设置、调试解析器、测试代理或 VPN,或调查不一致的流量分类时,两者都用。有关指纹工具的更广泛比较,请参阅 BrowserScan 与 Pixelscan.dev 和 WebBrowserTools 的对比 以及 2026 年浏览器隐私测试排名。

相关阅读

来源与进一步阅读

常见问题

BrowserScan 使用 UAParser.js 吗?

BrowserScan 是一个独立的在线测试平台。UAParser.js 是一个单独的 JavaScript 库。它们是互补工具,而不是一个产品的组件。

我可以在浏览器和服务器上运行 UAParser.js 吗?

是的。UAParser.js 是同构的,使用单一 API 在浏览器和 Node.js 中工作。客户端提示解析需要安全上下文。

指纹和 User-Agent 解析有什么区别?

指纹是许多浏览器和设备信号的组合。User-Agent 解析是对其中一两个信号的结构化读取。BrowserScan 报告指纹;UAParser.js 结构化 User-Agent 和 Client Hints。

为什么 BrowserScan 和 UAParser.js 有时不一致?

不一致通常来自伪造的 User-Agent 字符串、缺失的 Client Hints、重写标头的浏览器扩展或过时的解析器数据。比较两个输出是发现它们的方法。

UAParser.js 可以免费使用吗?

UAParser.js 通过 npm 分发,并在 GitHub 上有长期的维护历史。查看其官方网站以获取当前的许可和包选项。

结论

BrowserScan 和 UAParser.js 解决同一问题的不同部分。BrowserScan 揭示你的浏览器暴露了什么;UAParser.js 显示服务器如何将这些信号转换为浏览器、操作系统、设备和机器人分类。首先运行 BrowserScan,捕获原始信号,使用 UAParser.js 解析它们,然后进行比较。这个循环将一次性的隐私检查转变为可重复且可信的审计。

上一个
BrowserScan 与 Pixelscan.dev 及 WebBrowserTools 对比:指纹测试
最近修改: 1970-01-01Powered by