UA 是最容易改的字段,但引擎、平台和 Client Hints 改不干净。几处说法互相矛盾,平台会直接判定为篡改或自动化访问。
UA ↔ JavaScript 引擎根据各引擎特有的报错方式识别真实的 JS 引擎,与 UA 声称的浏览器比较
UA 版本 ↔ 引擎能力根据浏览器支持的 JavaScript 新特性推算真实版本区间,与 UA 声明的版本比较
UA 系统 ↔ navigator.platform比较 UA 声明的操作系统与浏览器报告的平台
UA ↔ Client HintsChromium 内核会通过 Client Hints 单独报告品牌、版本与平台,与 UA 字符串比较
HTTP UA ↔ JavaScript UA比较服务器收到的 User-Agent 与页面内的 navigator.userAgent
自动化框架痕迹检查 WebDriver 标记、无头浏览器 UA 以及 Selenium、Playwright 等框架注入的变量
主线程 ↔ Worker在独立的 Worker 里读取 UA、平台、语言、时区与硬件参数,与页面内读到的值比较
API 原生性检查 UA、平台、语言、时区与 Canvas / WebGL / Audio 等 API 是否仍是浏览器原生实现
WebRTC 接口Chromium 内核无法在设置里关闭 WebRTC,检查 RTCPeerConnection 是否被删除