【发布时间】:2021-05-25 02:11:08
【问题描述】:
有什么方法可以检测用户是否使用的是真实浏览器?
我能够从$_SERVER['HTTP_USER_AGENT'] 获取用户代理字符串。但我不确定它是否是真正的浏览器。我们能不能在php端做点什么来看看它是不是真正的浏览器?
【问题讨论】:
-
如何定义“真正的浏览器”?
-
真实浏览器是指来自真实用户的请求,而不是像 curl 脚本那样伪造访问。
有什么方法可以检测用户是否使用的是真实浏览器?
我能够从$_SERVER['HTTP_USER_AGENT'] 获取用户代理字符串。但我不确定它是否是真正的浏览器。我们能不能在php端做点什么来看看它是不是真正的浏览器?
【问题讨论】:
不,您无法可靠地检测发送的请求是否是“真正的浏览器”。 (假设“真正的浏览器”是指安装在标准消费者操作系统上的 chrome/firefox/safari,而不是 curl、ajax 调用或爬虫等)
那是因为用户代理只不过是一个 http 标头字段。你可以很容易地伪造它。例如。使用 curl 发送以下请求会在您的服务器上看起来就像我在 Mac 上使用常规 Chrome 44:
curl -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36" http://your-website.com
但除了用户代理标头不可靠之外:您当然可以使用该字段来确定请求是否由“预期”客户端发出。在 99.9% 的请求中,您会在用户代理标头中找到“真实”客户端。但是你不应该让任何安全敏感的函数依赖它。
【讨论】: