Примеры как запретить доступ к сайту по IP-адресам в PHP и htaccess.
Определение IP-адреса
В PHP IP-адрес клиента доступен в переменной $_SERVER['REMOTE_ADDR'], но не всегда она содержит истинный т.к. клиент может использовать прокси. Для определение истинного адреса можно использовать функцию.
function getIp($default = '')
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$value = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$value = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (!empty($_SERVER['REMOTE_ADDR'])) {
$value = $_SERVER['REMOTE_ADDR'];
} else {
return $default;
}
return $value;
}
$black_list = array(
'192.168.0.0',
'192.168.255.255',
'172.16.0.0',
'172.31.255.255',
);
if (in_array($_SERVER['REMOTE_ADDR'], $black_list)) {
exit;
}
Order Allow,Deny
Allow from all
Deny from 192.168.0.0 192.168.255.255 172.16.0.0 172.31.255.255
Order Allow,Deny
Allow from all
Deny from 192.168.0.0
Deny from 192.168.255.255
Deny from 172.16.0.0
Deny from 172.31.255.255
$black_list = array(
array('192.168.0.0', '192.168.255.255'),
array('172.16.0.0', '172.31.255.255'),
);
$ip = @ip2long($_SERVER['REMOTE_ADDR']);
foreach($black_list as $ips) {
if ($ip >= @ip2long($ips[0]) && $ip <= @ip2long($ips[1])) {
exit;
}
}
Order Allow,Deny
Allow from all
Deny from 192.168.0.0/16
Deny from 172.16.0.0/12
$black_list = array(
'192.168.0.*',
'172.16.*.*'
);
foreach($black_list as $ips) {
if (preg_match('/' . $ips . '/', $_SERVER['REMOTE_ADDR'])) {
exit()
}
}
Order Allow,Deny
Allow from all
Deny from 192.168.
Deny from 172.16.