从用户代理获取用户 OS 可靠吗?

Is getting users OS from user agent reliable?

所以目前在我的网站上,当用户注册帐户时,我会记录用户 OS。然后他们可以在 "account page".

上查看(他们的 OS 在注册时登录)

但我的问题是,让用户 OS 从 PHP 中解析 useragent 可靠吗?例如,我通过 php 中的 $_SERVER['HTTP_USER_AGENT'] 获取用户 useragent,然后解析它以从 useragent 中提取他们的 OS。我可以相信这对合法用户来说是准确的吗?

我真的不在乎黑客是否可以欺骗 useragent,我真正想知道的是这个 ($_SERVER['HTTP_USER_AGENT']) 是否会给我用户准确的 OS 来自合法(非黑客)网站访问者?

是的,它对非黑客用户来说是可靠的。

更多说明

用户代理字符串是浏览器自己发送给网络服务器以标识自己的文本,以便网站可以根据浏览器或浏览器兼容性发送不同的内容。

Mozilla 是一种浏览器呈现引擎(Firefox 的核心引擎),Chrome 和 IE 包含字符串 Mozilla/4 或 /5 这一事实表明它们与该呈现兼容引擎。

您还可以使用php的get_browser()功能。

大多数情况下它是相当可靠的,因为大多数人都懒得更改这些信息。所以纯粹用于辅助,ease-of-use,功能还可以。
特别是在这些情况下,您使用它来填写 "default" 值。如果错误,用户可以选择更改。

但是,由于它 可以 被任何对 HTTP and/or 网络浏览器有所了解的人 changed/spoofed 使用,因此您不能依赖它任何与安全相关的事情。甚至有相当多的浏览器可以让用户随意更改他们的 user-agent 字符串。
这包括使用 user-agent 字符串来尝试识别用户。因为复制 headers 和欺骗您自己的东西非常容易。

使用SSL会稍微增加难度。尽管如此,为了从您的用户(或管理员)那里获得所有 headers,攻击者只需要将您站点上的 post 一个 link 连接到他自己的服务器即可。之后他就可以随心所欲了。

您似乎在问,当这个字段可靠时,您是否可以相信它是可靠的?嗯,是的,你可以;靠谱就靠谱

但这些时间很少见。您无需成为 "hacker" 即可欺骗用户代理。一个简单的浏览器扩展就可以做到这一点,或者如果请求是脚本化的,则在 wgetcurl 命令中添加一个额外的参数。

用户代理 100% 容易出错,您不应该依赖它来做任何有用的事情。

如果你想让你的 UI 更友好。比方说:"Is user on Chromer?" 然后给他看一些有用的信息。那么它 100% 可靠且非常有用。我不在乎我的 UI 对黑客有多友好。

在某些情况下,例如...可以说出于某种原因您想阻止每个人,但 Chrome 所有者,..您不能依赖它。