限制访问特定国家/地区的 PHP 网站

Posted

技术标签:

【中文标题】限制访问特定国家/地区的 PHP 网站【英文标题】:PHP web site that restricted access to specific country 【发布时间】:2009-12-17 06:27:14 【问题描述】:

既然 IP 可以被欺骗,那么如何构建一个能够正确识别访问者所在国家/地区的 php 网站?

【问题讨论】:

【参考方案1】:

鉴于互联网的匿名性,这本质上是一个问题,但无论如何,通过欺骗 IP 地址来获取您所在国家/地区不合法提供的内容在技术上无论如何都是犯罪行为。

您应尽一切合理努力确保您的网站遵守媒体和信息的分发限制,但有些事情要防范是不切实际的。您最接近的方法是进行实际的实际地址验证,例如信用卡上的帐单地址或亲自邮寄某人的密码以进行注册,但这两种选择都会代表用户或您自己产生费用。

【讨论】:

【参考方案2】:

Joomla一直在使用下面的函数来获取IP地址,这是一个非常通用的好函数,可以避免可能的作弊,你可以使用它:

function get_ip()

    $ip = false;

    if (!empty($_SERVER['HTTP_CLIENT_IP']))
    
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    

    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
    
         $ips = explode (', ', $_SERVER['HTTP_X_FORWARDED_FOR']);

         if ($ip != false)
         
              array_unshift($ips,$ip);
              $ip = false;
         

         $count = count($ips);

         # exclude IP addresses reserved for LANs
         for ($i = 0; $i < $count; $i++)
         
              if (!preg_match("/^(10|172\.16|192\.168)\./i", $ips[$i]))
              
                  $ip = $ips[$i];
                  break;
              
         
    

    if (false == $ip AND isset($_SERVER['REMOTE_ADDR']))
    
        $ip = $_SERVER['REMOTE_ADDR'];
    

    return $ip;

【讨论】:

@Sarfraz,谢谢。我会试一试。不太确定正则表达式过滤掉了什么。 这段代码比使用代理更容易破解:只需将传出请求的标头设置为允许的 IP。不需要代理。这是众所周知的,例如在美国以外观看喜剧中心。 您可能是对的,但我们在使用该功能时没有发现 joomla 有任何问题。如果你看过一个,请告诉我们。谢谢 详细说明:这段代码是一个开始。您需要验证 AND REMOTE_ADDR 是否在您所在的国家/地区。 这是一个如何绕过上述代码的示例,非常具体:ohryan.ca/blog/2009/08/15/…

以上是关于限制访问特定国家/地区的 PHP 网站的主要内容,如果未能解决你的问题,请参考以下文章

IOS 限制对某些国家或 WLAN 的应用程序的访问

根据访问者所在的国家/地区更改网页横幅图像

将谷歌预测限制在特定国家/地区不起作用

使用 htaccess 和 GeoIP 阻止特殊地址或 URL 的国家/地区

根据访问者 IP 地址(国家/地区)将主网站重定向到子域

网站通过nginx设置黑/白名单IP限制国家城市IP访问限制