UA 与设备信息

浏览器、系统、屏幕、硬件与环境特征的完整画像,本地读取不上传。

UA 与设备信息

读取本机环境…

User-Agent:一段字符串的历史包袱

UA 是浏览器随每个请求自报家门的字符串,格式大致是:Mozilla/5.0 (平台; 系统版本) 引擎 版本。 它在 90 年代浏览器大战中不断累加"兼容声明",最终变成了著名的造句冗余——Chrome 的 UA 里有 AppleWebKit、 有 Gecko、还有 Safari 字样,全是历史兼容的产物,浏览器自己已经不再按字面理解这些标记。 2020 年起 Chrome 冻结了 UA 的次要版本号(永远显示 .0.0.0),并推动用结构化的 UA-CH(Client Hints)替代整段字符串, 因为 UA 既不可靠又是指纹追踪的高熵来源。

UA 交叉验证:为什么伪造 UA 容易露馅

UA 字符串可以随意改(浏览器扩展、开发者工具都能做到),但平台 API(navigator.userAgentData.platform)、 触屏支持(maxTouchPoints)、屏幕与硬件特征来自浏览器底层,与 UA 各自独立。 当 UA 声明 "Windows Chrome" 而平台 API 返回 Android,或 UA 声称移动系统而设备特征为桌面时, 风控系统可直接判定环境伪造——伪装者的常见失误是只改了 UA 字符串,忘了改底层信号。 伪装度评分中的"UA 平台与环境交叉一致"维度检测的就是这类矛盾:不只看你声称自己是谁,而是核对各处信号是否互洽。

这个页面对开发者的用途

前端调试 UA 相关逻辑(响应式断点、特性嗅探降级)、后端核对日志里的客户端画像、 爬虫工程师验证自定义 UA 是否生效,都常用这类页面。比打开 DevTools 看 navigator 对象更直观—— 所有字段一次性铺开,包括 JS 引擎版本、屏幕色深、硬件并发数这些散落各处的属性。

相关文章

更多内容见 博客列表

常见问题

UA 里的 Safari 字样是因为装了 Safari 吗?

不是。这是浏览器大战的历史遗留:Chrome 为了让只认 Safari 标记的网站正常工作,主动在自己的 UA 里塞进了 AppleWebKit/537.36 和 Safari/537.36。所有 Chromium 系浏览器(Edge、Opera)的 UA 都带这两个字样,与是否安装 Safari 无关。

我的 Chrome 明明是最新版,为什么 UA 显示的还是旧版本号?

Chrome 自 2020 年起冻结 UA 中的次要版本(minor version 固定为 0.0.0),只保留主版本号。这是官方策略,目的是降低 UA 的指纹熵并推动网站改用 UA-CH。所以 UA 里的 "Chrome/130.0.0.0" 是刻意为之,不代表你的浏览器没更新。

userAgentData 和传统 UA 有什么区别?

userAgentData(UA-CH,Client Hints)是 UA 的结构化继任者:不是一整段字符串,而是按需提供的键值对(platform、mobile、brands),默认只给低熵信息,高熵字段(架构、完整版本、型号)需要网站显式请求。设计目标就是既满足自适应需求又减少指纹追踪面。

改了 UA 就能伪装成手机吗?

只改 UA 字符串远远不够。手机的特征不止 UA:触屏支持(maxTouchPoints)、屏幕尺寸与 DPR、是否支持振动 API、userAgentData.mobile 标记、性能特征都是独立信号。只改 UA 而其他信号还是桌面特征,交叉验证立刻就能识破。

为什么我的语言列表有多个条目?

浏览器按优先级上报你能接受的语言(Accept-Language),第一个是你设置的界面语言,后面的是你添加的备选语言。多语言列表本身是指纹信号——同时报 zh-CN 和 en-US 的用户在统计上就有明显区分度。