Javascript`userAgent`可以与浏览器的头请求不同吗?

时间:2017-04-05 04:08:19

标签: javascript browser http-headers user-agent navigator

Javascript报告的navigator userAgent可能与发送为User-Agent标头的navigator.userAgent sudo有任何合理的情况。

我要问的部分原因是:我有一个应用程序从JS收集用户代理以报告回服务器。在大多数合法案件中,这不是必需的。但是,他们真的可能不同或撒谎吗?

nvm只读'使改变不太可能。无论出于什么原因,我只是想知道黑客或扩展程序是否真的可以在普通浏览器或无头浏览器上这样做。

3 个答案:

答案 0 :(得分:1)

是。一堆IE版本至少只在javascript中报告了插件。 https://blogs.msdn.microsoft.com/ieinternals/2009/10/07/the-user-agent-string-use-and-abuse/

答案 1 :(得分:0)

好的,这是我自己的测试和研究的答案。标头和客户端之间有三种类型的用户代理差异:

IE发送pre and post platform registry value tokens to the server to improves compatibility and network performance的简短UA字符串策略。使用navigator.userAgent提供的扩展UA字符串。然后,他们添加了添加extension tokens的功能。

默认情况下,适用于iOS的Tor浏览器会发送Windows桌面Firefox用户代理。 目前:Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0

然而,Javascript报告了一个通用的Safari Mobile Web视图用户代理。

UCMini(U2)使用以下请求发送UCWeb用户代理:

UCWEB/2.0 (iPad; U; CPU OS 7_1 like Mac OS X; en; iPad3,6) U2/1.0.0 UCBrowser/9.3.1.344

虽然客户端报告了这个wackadoodle:

Mozilla/5.0 (X11; U; Linux i686; zh-CN; r:1.2.3.4) Gecko/

答案 2 :(得分:0)

是的,如果用户代理欺骗不完整。

浏览器插件

仅会更改http-header中的用户代理,而不会更改javascript变量中

  • navigator.userAgent
  • navigator.appCodeName
  • navigator.appName
  • navigator.appVersion
  • navigator.platform
  • navigator.vendor
  • navigator.vendorSub

要获得[更多]完整的用户代理欺骗,请同时更改javascript变量:

// ==UserScript==
// @name        Change navigator.userAgent
// @namespace   Rob W
// @description Changes navigator.userAgent to IE on IEGallery.com
// @match       http://www.iegallery.com/*
// @run-at      document-start
// @grant       none
// @version     1
// ==/UserScript==

Object.defineProperty(navigator, 'userAgent', {
    value: 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'
});

测试页: