54

我知道使用户代理提示更加模棱两可,部分目的是使浏览器指纹识别更加困难。

我自己的(Windows 桌面)Chrome 发送标题:

user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36
sec-ch-ua: "Chromium";v="86", "\"Not\\A;Brand";v="99", "Google Chrome";v="86"
sec-ch-ua-mobile: ?0

我不明白的是:

  1. 为什么要专门使用字符串“Not A Brand”?还有其他人使用这个伪UA吗?这是某种玩笑吗?
  2. 为什么字符串里面有\"and ?\\A;我唯一的猜测是,这应该会以某种方式与解析器混淆(就像 CSS 中的反 IE hacks),但这似乎是一个相当奇怪的目的——而 IIRC\A是铃铛字符。
  3. 鉴于它还发送user-agent具有特定版本号的完整标头,这应该如何实现用户代理提示歧义?
  4. 在此期间:为什么 Chrome 的用户代理也声称是 Mozilla、AppleWebKit 和 Safari?不是,而且这个user-agent字符串明显是 Chrome 的。它是否具有来自其他浏览器的某种嵌入式组件?
4

2 回答 2

45

这似乎是 Chromium 润滑策略的一部分

包含多个条目的用户代理的品牌可以鼓励对 UA 字符串进行标准化处理。通过随机包含附加的、故意不正确的、以逗号分隔且具有任意顺序的条目,它们将减少我们在一些必需的字符串上僵化的机会。


查看 Chromium 仓库,好像是在这个 commit中引入的

给出的提交描述是:

[client-hints] GREASEing the Sec-CH-UA list

Randomizing order and string with escaped characters to ensure proper
parsing and prevent ossification.

它还链接到错误跟踪器中的这张票

于 2020-10-20T10:24:42.473 回答
0

如果有人正在寻找 Chromium\Cefsharp 的解决方案,这里是如何全局禁用此标头的方法:

Cefsharp(C# 代码):

var settings = new CefSettings();
settings.CefCommandLineArgs.Add("disable-features", "UserAgentClientHint");
Cef.InitializeAsync(settings);
于 2022-01-03T14:02:37.763 回答