在php中,如果我有一個成員系統,我該如何限制只有某些ip地址才能以管理員/管理員身份登錄?我知道有php在會員系統中爲管理員設置特定的ip
$_SERVER["REMOTE_ADDR"]
但這是否包括使用代理或路由器的人呢?
或者還有其他的方法嗎?
感謝
在php中,如果我有一個成員系統,我該如何限制只有某些ip地址才能以管理員/管理員身份登錄?我知道有php在會員系統中爲管理員設置特定的ip
$_SERVER["REMOTE_ADDR"]
但這是否包括使用代理或路由器的人呢?
或者還有其他的方法嗎?
感謝
你可以嘗試
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被欺騙,黑客仍然必須猜測強密碼!
您可以通過查詢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));
}
當然,IP可以被欺騙? – JBithell
是的,它可以被欺騙,並且確保訪問的最佳方式是添加登錄名和密碼。 –
您確定要限制通過IP訪問?這將很難處理,因爲每當用戶斷開/重新連接到互聯網時,IP都會發生變化。 –
@AkramFares我...沒有選擇...大聲笑 – Andrew