修改 User-Agent header 时是否可以检测真实的 OS 名称

Is it possible to Detect Real OS name when the User-Agent header is modified

除了找到用户的 OS 真实姓名外,还有什么办法吗?

我需要知道我的客户是否在 user-agent header 中更改他们的 OS 姓名。

没有

这样想问题。有两个远程方通过单个通道相互通信。一方发送消息“我的名字是彼得”。现在另一方无法验证此信息的真实性,除非另一个能够通过外部手段验证各方详细信息的威权服务强制要求前两方自行注册。

不幸的是,Internet 协议被设计为在 client-server 领域中运行。这意味着没有强制性的专制政党来规范两个个体之间发生的任何特定通信。

信息验证的唯一救星是密码学。有两个它不能应用于各种验证。密码学可以用来克服诸如“两将悖论”之类的问题——即验证从一方收到的信息在通信过程中没有被拦截和修改。但是在当前的 Internet 协议设计中,没有可行的解决方案来验证与来源不在目标无法控制的域中的信息一样基本的信息。

如果客户端运行 Javascript,并且您愿意接受有些不可靠的结果,您可以 detect their browser's features 做出一个相当 well-informed 的猜测,并在某些情况下推断OS(例如,如果您检测到 IE 或 Edge,它们很可能是 运行 Windows)。但是,它仍然容易被欺骗。