Фильтрация IP-адресов

Примеры как запретить доступ к сайту по IP-адресам в PHP и htaccess.

1

Определение 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;
}
PHP
2

Фильтрация по списку

$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;
}
PHP

В .htaccess применяется конструкция Order, Allow, Deny. Адреса перечисляются через пробел или отдельными строками.

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
3

Фильтрация по диапазону

$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;
	}
}
PHP

В htaccess диапазон блокируемых IP задаётся в виде бесклассовой адресации (CIDR). Для его формирования можно использовать сервис ip2cidr.com

Order Allow,Deny
Allow from all
Deny from 192.168.0.0/16
Deny from 172.16.0.0/12
4

Фильтрация по маске

$black_list = array(
	'192.168.0.*',  
	'172.16.*.*'
);

foreach($black_list as $ips) {
	if (preg_match('/' . $ips . '/', $_SERVER['REMOTE_ADDR'])) {
		exit()
	}
}
PHP

В .htaccess нельзя задать маску вида 192.168.0.*, но можно не указывать последние части адреса – будет заблокирован весь диапазон.

Order Allow,Deny
Allow from all
Deny from 192.168.
Deny from 172.16.
24.10.2018, обновлено 27.08.2019 1623
Следующая запись Массив $_SERVER

Поделится

Темы

Apache Защита

Другие публикации

В статье приведен пример формы и php скрипта для безопасной загрузки файлов на сервер, метод отправки файлов через...
В PHP 5.3 появился класс NumberFormatter для форматирования чисел и денежных единиц в нужной локали. На его основе была...
После регистрации в системе эквайринга Сбербанка и получив доступ к тестовой среде, можно приступить к интеграции с...
Действие файла .htaccess распространяется на директорию и подкатегории в котором он размещен.
Описание значений глобального массива $_SERVER с примерами.
В продолжении темы работы с массивами поговорим о типичной задаче – их сортировке. Для ее выполнения в PHP существует...