限制访问如果不从某些引荐过来(S)PHP(Restricting access if not com

2019-09-18 02:54发布

我伤透了我的大脑,为什么这是行不通的。

我想实现的,是限制访问一个页面上我自己的网站,如果只从某网站的未来,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.";

}

Answer 1:

首先,你的代码是有缺陷的,因为:

  • 如果用户不使用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']);

( 关于文件preg_quote()

除了这一切,有在检查引荐没有安全。 它可以改变的,它可以通过电子邮件完全阻断。 它不应该被依靠。



Answer 2:

Facebook的挂接外部链接到http协议,而不是https 。 改变你的目标网站,这样的:

$target_site = 'http://www.facebook.com/';

您可以通过右键单击张贴在Facebook上的链接,并将其复制到剪贴板(然后将其粘贴)证实了这一点。 你会看到它看起来像这样:

`http://www.facebook.com/l.php?u=...`

这样的话,无论你是否实际上浏览httpshttp



文章来源: Restricting access if not coming from certain referer(s) PHP