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

问题描述:

由于IP可能被欺骗,如何建立一个能正确识别访问者国家的PHP网站?限制访问特定国家的PHP网站

的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; 
} 
+0

@Sarfraz,谢谢。我会试一试。不太清楚正则表达式滤除了什么。 – cheapskate 2009-12-17 06:35:37

+0

与使用代理相比,此代码更容易失败:只需将传出请求中的标头设置为允许的IP。没有代理需要。这是众所周知的,例如在美国之外观看喜剧中心。 – McPherrinM 2009-12-17 06:35:49

+0

你可能是对的,但是在使用这个函数的时候我们还没有看到joomla的任何问题。如果你看过一个,请告诉我们。谢谢 – Sarfraz 2009-12-17 06:42:46

这是本质上给出了互联网的匿名性问题,但欺骗IP地址以获取贵国不合法的内容在技术上在大多数地方是犯罪行为。

您需要尽一切努力确保您的网站遵循媒体和信息的分发限制,但有些事情只是不切实际的防范。您可以得到的最接近的数据是通过实际的物理地址验证,例如信用卡上的帐单地址或向某人寄送一个PIN码以进行注册,但这两个选项都会代表用户或您自己承担费用。