我绞尽脑汁想知道为什么这不起作用。
我想要实现的是限制对我自己网站上页面的访问,仅当来自某个网站(例如 Facebook)时。
由于链接将发布在 1 个或多个 Facebook 页面和/或我的个人资料上,如果脚本来自 Facebook 和/或它发布的任何其他“页面”,我希望脚本能够执行。
例如,如果我将我的链接发布到 www.facebook.com/This_is_my_PAGE 或发布到我的个人资料 www.facebook.com/freds_personal_profile 或有人分享我在 Facebook 上的链接,希望该页面只能由来自 Facebook 域的人访问。
我在搜索解决方案时发现了下面的脚本,但它正在回应我的错误消息,而不是重定向到有问题的链接。
$target_site = 'https://www.facebook.com/';
if (isset($_SERVER['HTTP_REFERER']) && preg_match("/$target_site/",$_SERVER['HTTP_REFERER'])) {
// do something with people from facebook.com
}
else {
// do something else with everyone else
echo "Sorry, viewable to Facebook fans only.";
}
最佳答案
首先,您的代码存在缺陷,因为:
- 如果用户没有使用 Facebook 的“安全版本”(http 而不是 https)怎么办?
- 如果用户来自
facebook.com
而不是www.facebook.com
怎么办? - 如果恶意用户诱使用户从
http://example.com/evilpage.php?https://www.facebook.com/
等网站访问怎么办?
它不起作用的主要原因是您的正则表达式完全无效。相反,它应该遵循:
preg_match("/".preg_quote($target_site,"/")."/i",$_SERVER['HTTP_REFERER']);
( documentation on preg_quote()
)
除此之外,检查引荐来源网址并不安全。它可以改变,也可以完全封锁。不应依赖它。
关于php - 如果不是来自某些 referer(s) PHP,则限制访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11022275/