我绞尽脑汁为什么这不起作用.
我想要实现的是限制访问我自己网站上的页面,只有来自某个网站,例如Facebook.
由于链接将在一个或多个Facebook页面和/或我的个人资料中发布,因此如果来自Facebook和/或其发布的任何其他“PAGES”,则希望脚本执行.
例如,如果我在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()
)
除此之外,检查引用者没有安全性.它可以改变,它可以完全阻止.不应该依赖它.