【发布时间】:2018-01-12 11:13:56
【问题描述】:
我正在尝试检查用户是否来自应用内 Facebook 浏览器,因为如果是 Facebook 浏览器,我网站上的某些功能将无法正常工作。
我找到了一些 JS sn-ps,但我想用 PHP 来检查它,因为我还用 PHP 过滤了一些其他东西,并且不想为此使用 JS。
我使用的是 Laravel 5.4 框架,但普通的 PHP 解决方案也很好。
我用 Facebook 浏览器和 firefox/chrome 浏览器检查了我的 HTTP_USER_AGENT 并发现了一些不同。
firefox 还给了我这个:
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
和脸书这个:
Mozilla/5.0 (Linux; Android 6.0; HUAWEI VNS-L31 Build/HUAWEIVNS-L31; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/56.0.2924.87 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/116.0.0.17.69;] <<-- Important
我注意到最后:[FB_IAB/FB4A;FBAV/116.0.0.17.69;]
所以我写了这段代码:
if (
strpos($_SERVER["HTTP_USER_AGENT"], "FB_IAB") !== false ||
strpos($_SERVER["HTTP_USER_AGENT"], "FB4A") !== false ||
strpos($_SERVER["HTTP_USER_AGENT"], "FBAV") !== false
)
{
return "its fb";
}
else {
return "its not fb";
}
是的,它对我有用。但我不知道它是否适用于这样的其他用户。我也没有使用 http_header - 信息。那么你认为我对这段代码安全吗,还是我需要改变一些东西?
感谢您的帮助,对不起我的英语不好!
【问题讨论】:
-
这就是 JS 解决方案 - 我想用 PHP 来做 :)
-
引用:您可以在用户代理中检查 FBAN / FBAV。
-
我检查 FBAV 但不检查 FBAN - 我还将添加 FBAN 作为 4. 条件:)
-
我也会改用
if(in_array(['FBAN', 'FBAV','FB_IAB','FB4A']) return "its fb"。 :)