关于如何编写一个能够检测我的浏览器的网站,有很多讨论(例如,这里)我想知道,像whatismybrowser.com如果我欺骗我的用户代理(例如,使用代理机构)...?
答案1
网站通过 HTTP 在标头元素(称为“用户代理”)中提供的字符串来了解浏览器来自何处。
User-Agent 请求标头是一个特征字符串,可让服务器和网络对等方识别请求用户代理的应用程序、操作系统、供应商和/或版本。
例如,这就是服务器如何知道将您发送到 OSX 下载而不是 Windows 下载的原因。此外,它还可能知道您需要 Windows X 版本而不是 Windows Y 版本。
请参阅此帖子: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent
答案2
很难给出一个明确的答案。每个 Web 浏览器都有独特的签名。Edge 浏览器发送的内容如下:
GET https://www.whatismybrowser.com HTTP/1.1
Host: www.whatismybrowser.com:443
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: "Chromium";v="112", "Microsoft Edge";v="112", "Not:A-Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.48
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: fr,fr-FR;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: privacy_consent_guest=CONSENTED%3A1664890623; lastvisit=1664914441; lastactivity=1664920887; vbprivacy_consent_guest=CONSENTED%3A1666023032; vbsessionhash=f6a8698605bdc7f2ef00a3a50eb63cd4; vblastvisit=1679194983; PHPSESSID=fftjqa0h3qbo28d9v18lgfp5nobvbtntt5t6tt86r5detvo1; vblastactivity=1681928773; _ga_RZEJWJ0N3V=GS1.1.1681928775.1.0.1681928775.0.0.0; _ga=GA1.2.558762357.1664890620; _gid=GA1.2.1029072516.1681928776
而 Firefox 会发送如下内容:
Host: audiokeys.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Cookie: privacy_consent_guest=CONSENTED%3A1603133415; lastvisit=1664883576; lastactivity=1664884348; _ga=GA1.1.2025672830.1664883577; password=18f33f933cc6c56fbd61f03a755bcd3ec94be9617bb638a04dc19874; userid=45968; userstyleid=32; vblastvisit=1664970539; vblastactivity=1664971524; vbprivacy_consent_guest=CONSENTED%3A1664971501; vbpassword=18f33f933cc6c56fbd61f03a755bcd3ec94be9617bb638a04dc19874; vbuserid=45968; _gid=GA1.2.1739401847.1680040151; _ga_RZEJWJ0N3V=GS1.1.1681847671.60.1.1681852583.0.0.0; vbsessionhash=5aaf13ab69c92fd91b24d322bbb9e859
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
字段集不同,可以收集的信息很多,不仅User-Agent
容易被欺骗。
如果这还不够,页面可以加载一个 Javascript 来进一步探测导航器(但我猜 JS 看到的用户代理也会被你的插件改变,那么脚本必须足够智能)。
我尝试过使用curl
发送混合查询。(结果不由 JavaScript 处理)。第一个查询结果User-Agent
不变或被欺骗。结果是 Edge 112 和 Chrome 70(甚至是 Safari 12)。第二个请求给出 Chrome 70。然后,使用 Javascript 进行后处理似乎非常有可能,因为我的机器上没有 Chrome,而我浏览器上的打印是关于 Firefox 的。
请注意,“您的网络浏览器看起来像:”这句话位于 Javascript 中。这证实了与此类脚本的交互。该脚本可在此处下载https://cdn.whatismybrowser.com/prod-website/static/main/js/site.min.js。它相当模糊,但你会认出一些浏览器模型。然后有很多启发式方法,例如“如果有这样的属性,那就是 Firefox...”