2009-12-17 90 views

回答

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

1

這是本質上給出了互聯網的匿名性問題,但欺騙IP地址以獲取貴國不合法的內容在技術上在大多數地方是犯罪行爲。

您需要盡一切努力確保您的網站遵循媒體和信息的分發限制,但有些事情只是不切實際的防範。您可以得到的最接近的數據是通過實際的物理地址驗證,例如信用卡上的帳單地址或向某人寄送一個PIN碼以進行註冊,但這兩個選項都會代表用戶或您自己承擔費用。