如何防止用户代理被用户更改

Posted

技术标签:

【中文标题】如何防止用户代理被用户更改【英文标题】:How to prevent user-agent to be changed by user 【发布时间】:2015-12-24 16:00:53 【问题描述】:

我正在开发一个应用程序,并且有一个页面我只希望它可供从 iphone 设备访问的用户使用..

据我们所知,用户可以从客户端或通过浏览器模拟器更改用户代理,所以我想知道是否有办法阻止它?

注意:我设法通过在登录时将浏览器用户代理保持在会话中来防止用户登录我的网站后发生这种情况。所以即使用户在那之后更改了用户代理,我也只会考虑我在登录时保存在会话中的上一个用户代理

但是,如果用户在调用我的网站并创建会话之前使用模拟器将用户代理更改为“iphone”,则可能无法正常工作..

你能帮我吗? 谢谢,

【问题讨论】:

你无法阻止它。 你会有很大的成功机会,因为我会命令你不要再呼吸了...... 【参考方案1】:

没有可靠的方法来验证客户端的用户代理。充其量,您可能能够使用有关其浏览器的其他信息进行推断,例如如果他们说他们是 iPhone,但他们有一个 1920x1080 的屏幕/浏览器窗口,那是不对的。但我不建议这样做。

【讨论】:

反正毫无意义。检测此类事情需要javascript,无论如何它都在用户的控制之下。如果他们要入侵 UA 以闯入一个网站,那么没有什么能阻止他们入侵 JS 检测代码只是说“是的,这是一部 iphone”【参考方案2】:

简单的答案 - 你不能。

但是,您可以使用 CSS 媒体查询检测到用户正在移动设备上浏览,您可以使用 CSS 媒体查询来显示/隐藏警告,说明该页面仅适用于移动设备。

但这仍然无法阻止人们欺骗用户代理,对此您无能为力。

【讨论】:

【参考方案3】:

一个可行的技巧是检查navigator.platform。 See this post

但如果有人真的想在没有 iPhone 的情况下查看此页面,Javascript 是不安全的。

【讨论】:

但是您应该知道该属性已被弃用,developer.mozilla.org/en-US/docs/Web/API/NavigatorID/platform【参考方案4】:

注意,在 iPhone 上未经测试,但返回预期结果过滤 WebkitMozMs 浏览器中的前缀 Use Jquery to detect IE, then redirect,How to target only one browser?

尝试检查document.body.style 中的-apple 前缀

if ("AppleUserSelect" in document.body.style) 
  // do stuff

见Vendor-prefixed CSS Property Overview

【讨论】:

【参考方案5】:

您可以通过检测浏览器的特定功能(例如某些专有的 Javascript 函数)来检测使用的是哪个浏览器。

另外,在谷歌上搜索“浏览器指纹”,或许对你有帮助。

【讨论】:

【参考方案6】:

谢谢大家的回答。为了在保存方面,我会记住,如果有人打算访问该页面,可以嗅探并更改用户代理..

【讨论】:

以上是关于如何防止用户代理被用户更改的主要内容,如果未能解决你的问题,请参考以下文章

如何防止用户代理显示无法识别的 mime 类型的下载窗口?

在 chrome 响应式模拟器中重定向更改用户代理

windows7中如何更改safari中的默认用户代理? [关闭]

什么是 iPad 用户代理?

在 Chrome 中使用硒线更改用户代理

更改 WebBrowser 控件的用户代理