前言:
不知从什么时候开始,chrome 浏览器的请求头(隐身模式一样)默认会添加上Sec-Ch-Ua、Sec-Ch-Ua-Mobile、Sec-Ch-Ua-Platform 等几个默认的头信息,大致样例信息如下:
Sec-Ch-Ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99" Sec-Ch-Ua-Mobile: ?0 Sec-Ch-Ua-Platform: "macOS"
其中可以清楚的看到浏览器的真实版本号和操作系统类型,这可能也是很多浏览器跟踪程序的利用点之一。所以有的时候你以为你用插件换了 UA 就万事大吉了?太天真,浏览器里,各种 js 的 API 调用获取的信息太多了,而且你毫无知觉。关于跟踪暂时说到这,今天讲下如何禁止浏览器发送 Sec-Ch-Ua-XXX.
正文:
那我们如何禁止 chrome 发送这些头呢?其实很简单。下面简单讲下过程。
一开始也不知道如何去处理这个东西,就Google 一下 Sec-Ch-Ua 就得到了大致信息:好几年前W3C就开始推的新技术,名为 HTTP Client Hints ,官方主页:https://wicg.github.io/ua-client-hints/ 。知道是什么东西后,就再进一步加上关键字 disable 搜索,在 stackoverflow 上的一处提问里找到了解决办法。给 chrome 加上参数 --disable-features=UserAgentClientHint 。
我只说一下在 Mac 下如何给 chrome 添加启动参数,Windows 的很简单,只需要在快捷方式的属性里加上即可。
Mac 下给 chrome 添加参数:添加一个脚本在 chrome 的安装目录下,一般是 /Applications/Google Chrome.app/Contents/MacOS/ ,先将 Google Chrome 重名为 你喜欢的名字,比如 Chrome.real ,然后新建一个脚本文件,名为 Google Chrome ,将以下内容粘贴进去:
#!/bin/bash
cd "/Applications/Google Chrome.app/Contents/MacOS"
"/Applications/Google Chrome.app/Contents/MacOS/Chrome.real" --args --disable-features=UserAgentClientHint
然后赋予新的 Google Chrome 权限:chmod 775 Google Chrome ,退出所有的 chrome 进程重新打开 chrome,就可以发现没有携带 Sec-Ch-Ua- 了,另外还几个携带的请求头:
Sec-Fetch-Site: cross-site Sec-Fetch-Mode: no-cors Sec-Fetch-Dest: script
有看官知道如何禁止么?小提示:Fetch metadata request header 。
参考链接:
https://stackoverflow.com/questions/65565396/why-is-chrome-sending-sec-ch-ua-and-sec-ch-ua-mobile-request-headers-although-e
https://developer.mozilla.org/en-US/docs/Glossary/Fetch_metadata_request_header
https://source.chromium.org/chromium/chromium/src/+/main:services/network/sec_header_helpers.cc;l=162?q=FetchMetadataHeaders&sq=&ss=chromium
https://www.chromium.org/developers/how-tos/run-chromium-with-flags
https://peter.sh/experiments/chromium-command-line-switches/