如果不是来自某些引用PHP,则限制访问

我绞尽脑汁为什么这不起作用.

我想要实现的是限制访问我自己网站上的页面,只有来自某个网​​站,例如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())

除此之外,检查引用者没有安全性.它可以改变,它可以完全阻止.不应该依赖它.

上一篇:SQLarchemy 实现外键及其四种约束讲解


下一篇:Java – 如何限制特定方法的方法调用