【问题标题】:Checking a dynamic referer URL in PHP to prevent access to a page检查 PHP 中的动态引用 URL 以防止访问页面
【发布时间】:2019-11-20 10:21:22
【问题描述】:

我试图阻止对网页的直接访问,我只希望访问者能够在特定 URL 引用时查看该页面。

例如,访问者试图查看网页https://example.com/restricted,如果访问者不是来自https://example.com/redirect/***,则应将访问者重定向到主页。

为什么我在引荐来源网址中使用星号?这是一个动态(?)网址。我的意思是,引荐来源网址可以是https://example.com/redirect/514,但也可以是https://example.com/redirect/58613

所以基本上,我需要在 URL 末尾添加一个“通配符”,而不是末尾的数字。 https://example.com/redirect/WILDCARDHERE? (我是这么认为的)

注意:我将在我的 Wordpress 函数文件中使用此代码,我尝试了 Wordpress 堆栈溢出,但没有得到任何响应,这就是我在这里碰运气的原因。

我已经尝试了几件事,但我很无能为力。

add_action('template_redirect', function() {
if ( ! is_page(464)) {
    return;
}

if (wp_get_referer() == 'https://example.com/redirect/') {
    return;
}

wp_redirect( get_home_url() );
exit;
})

希望有人能给我提供正确的值!

【问题讨论】:

  • 如果您使用 wordpress,请添加 wordpress 标签。

标签: php wordpress referer


【解决方案1】:

您可以使用strpos 函数来检查referer 是否以您的域或重定向关键字开头。 示例用法

$referer = wp_get_referer();
if ($referrer !== false && strpos($referer, "domain") === 0) {
      return;
}

【讨论】:

  • 感谢您的回答,但这并不能真正解决我的问题,例如,用户可以从我的主页被引用,并且可以访问该页面,而他们不应该能够访问该页面。我粘贴的代码基本上就是这样做的。我真正需要的是在 URL 末尾为随机生成的数字添加一个“通配符”。
  • 我真的不会使用这种方法,因为 HTTP referer 很容易被操纵。如果您坚持使用这种方法,您可以使用正则表达式进行通配符检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 2010-09-16
  • 1970-01-01
  • 2016-11-22
  • 2012-05-22
  • 2015-01-07
  • 1970-01-01
相关资源
最近更新 更多