检测站点来自何处并允许来自允许的主机时出现HTTP_REFERRER问题

时间:2017-11-20 作者:Norman Bird

下面是代码。

我将代码放在函数中。WordPress安装中的子主题的php。

如您所见,我已将其设置为挂钩到“init”函数中,无论访问者访问哪个页面,都会感觉到它是运行的最佳位置。这就是我的研究所说的。如果有更好的地方,请分享。

基本上,预期用途是代码应该允许来自谷歌的用户使用。com主机访问站点。如果是这种情况,它还会设置一个cookie,以便用户可以访问其他菜单项而无需重定向。

如果最初不是来自google主机,则会检查cookie,如果没有cookie,则会重定向回google。com(同样,谷歌只是一个占位符,无法发布实际主机。)

问题是:

如果访问者访问主页以外的任何其他页面,则主机变量是正确的,但在主页访问中,$主机变量为空或未设置。

  • $主机变量始终未设置或为空。这是因为引用站点在发送到我的站点之前,使用Javscript执行一些代码和重定向。我可以理解为什么它可能不是“google.com”,但它应该设置为正确的?

  • 这就是我对http\\U推荐人缺乏了解的原因,我需要帮助。我读到,检查http\\u referer有问题,可以通过代码等进行欺骗。我明白了,我的问题是,此时可以做些什么来获取$host变量中的某些内容,为什么只转到WordPress站点的主页时它是空的?

    我需要一种方法来拒绝访问不是来自推荐网站的“非专业人士”。我不需要阻止黑客和程序员,我只需要阻止人们通过电子邮件共享链接或在facebook上发布网站链接,以及人们仅仅点击链接。

    function site_referral_check() {    
    
    if (!is_admin()){
    
    $allowed_host = \'google.com\'; // not actual production site
    $theurl =  $_SERVER[\'HTTP_REFERER\'];
    $host = parse_url($theurl, PHP_URL_HOST);
    
    //add console variable for debugging. how I know when $host is blank
    $javascript_ouput = "<script>console.log(\'Debug Info: " .$host. "\');
    </script>";
    
    echo $javascript_ouput;
    
    //echo "The allowed host: ".$allowed_host; exit;
    if ( !isset($_COOKIE["site-referral"])) {
    
    
            if ($host == $allowed_host) {
    
            setcookie( "site-referral", "site-referral", time() + 1800, COOKIEPATH, COOKIE_DOMAIN);
            } 
    
        if (!$host == $allowed_host) {  
    
            //Redirect 
                    wp_redirect(\'http://google.com\' ); exit;
            }
    
    
    
    }
    
    
    }
    
    }

    1 个回复
    SO网友:Sid

    这是从PHP website. 这可能就是问题所在。

    \'HTTP\\u REFERER\'

    将用户代理引用到当前页面的页面地址(如果有)。这是由用户代理设置的。并非所有用户代理都会设置此功能,有些代理提供将HTTP\\U REFERER修改为功能的功能。简言之,它真的不可信。

    结束

    相关推荐

    Cookies in template

    我需要根据cookies只显示一次页面的某些部分。主要问题是我只能在插件中设置cookie,挂起init操作。我已经读了20页的谷歌,这个网站,问了2个论坛,但我仍然有这个问题。任何帮助都将不胜感激!