2015-04-06 65 views
1

在php中,如果我有一個成員系統,我該如何限制只有某些ip地址才能以管理員/管理員身份登錄?我知道有php在會員系統中爲管理員設置特定的ip

$_SERVER["REMOTE_ADDR"] 

但這是否包括使用代理或路由器的人呢?

或者還有其他的方法嗎?

感謝

+0

您確定要限制通過IP訪問?這將很難處理,因爲每當用戶斷開/重新連接到互聯網時,IP都會發生變化。 –

+0

@AkramFares我...沒有選擇...大聲笑 – Andrew

回答

0

你可以嘗試

if ($_SERVER['REMOTE_ADDR'] == 'xxx.xxx.x.xxx') { 
    //Allow login as administrator 
} 

但不幸的是$ _ SERVER [ 'REMOTE_ADDR']從客戶端發送的,很容易被欺騙(見How to get the client IP address in PHP?)。

最好的選擇是使用上述解決方案和強大,安全的管理員密碼的組合,所以如果IP被欺騙,黑客仍然必須猜測強密碼!

0

您可以通過查詢IP地址範圍,而不是看如果用戶從右側連接內部網:

/** 
* Check if a given ip is in a network 
* @param string $ip IP to check in IPV4 format eg. 127.0.0.1 
* @param string $range IP/CIDR netmask eg. 127.0.0.0/24, also 127.0.0.1 is accepted and /32 assumed 
* @return boolean true if the ip is in this range/false if not. 
*/ 
function ip_in_range($ip, $range) { 
    if (strpos($range, '/') == false) { 
     $range .= '/32'; 
    } 
    // $range is in IP/CIDR format eg 127.0.0.1/24 
    list($range, $netmask) = explode('/', $range, 2); 
    $range_decimal = ip2long($range); 
    $ip_decimal = ip2long($ip); 
    $wildcard_decimal = pow(2, (32 - $netmask)) - 1; 
    $netmask_decimal = ~ $wildcard_decimal; 
    return (($ip_decimal & $netmask_decimal) == ($range_decimal & $netmask_decimal)); 
} 

來源:Gist on GitHub

+0

當然,IP可以被欺騙? – JBithell

+0

是的,它可以被欺騙,並且確保訪問的最佳方式是添加登錄名和密碼。 –