【问题标题】:Restricting access if not coming from certain referer(s) PHP如果不是来自某些引用者 PHP,则限制访问
【发布时间】:2012-06-16 20:20:10
【问题描述】:

我绞尽脑汁想知道为什么这不起作用。

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

}

【问题讨论】:

  • 也许您应该在错误消息中回显 $_SERVER['HTTP_REFERER'] 的内容。这会给你一个提示。
  • HTTP_REFEER 不是强制性标头,它可能不是由浏览器设置的。

标签: php restrict referer


【解决方案1】:

Facebook 将外部链接连接到 http 协议,而不是 https。将您的目标网站更改为:

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

您可以通过右键单击 facebook 中发布的链接并将其复制到剪贴板(然后粘贴)来确认这一点。你会看到它看起来像这样:

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

无论您实际上是使用https 还是http 浏览,都会出现这种情况。

【讨论】:

  • 我确实尝试过 Ben 谢谢,即使使用 http 和 https,它仍然显示我的错误消息。这就是我不明白的。
  • 弗雷德,我也刚刚注意到你的正则表达式完全被破坏了。请参阅@Kilink 的回答。
  • 我现在正在处理他的代码,由于某种原因收到 500 错误。
  • 更新:有效! Kolink 就在眼前,我也很感谢您的补充意见。 l.php?= 很不错。干杯~
【解决方案2】:

首先,您的代码存在缺陷,因为:

  • 如果用户没有使用 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())

除此之外,检查引荐来源网址没有任何安全性。它可以更改,可以完全阻止。不应该依赖它。

【讨论】:

  • 我从另一个关于 SO 的类似问题中得到这个,认为它会成立。这是一个公认的答案。
  • 一个答案被接受意味着提出问题的人认为它是正确的。这并不意味着它是最好的答案,也不意味着它甚至完全正确,只是它在提问者的意见中帮助最大。
  • 真正的 Kolink。如果有下一次,我会更加警惕。
  • 我认为使用.htaccess 会是一种更安全的方法(?)
猜你喜欢
  • 2012-11-07
  • 1970-01-01
  • 2013-04-04
  • 2017-05-08
  • 2012-05-31
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多