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

时间:2009-12-17 06:27:15

标签: php ip-geolocation spoofing

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

2 个答案:

答案 0 :(得分:1)

考虑到互联网的匿名性,这本质上是一个问题,但是欺骗性的IP地址以获取您所在国家/地区不合法的内容在技术上在大多数地方都是犯罪行为。

由您自己做出一切合理的努力来确保您的网站遵循媒体和信息的分发限制,但有些事情是不切实际的。您可以获得的最接近的方法是进行实际的物理地址验证,例如信用卡上的帐单邮寄地址,或者通过电子邮件向某人发送密码进行注册,但这两个选项都代表用户或您自己承担费用。

答案 1 :(得分:0)

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;
}