Другими словами, как я могу узнать, находится ли человек, использующий мое веб-приложение, на сервере, на котором оно находится? Если я правильно помню, PHPMyAdmin делает что-то подобное из соображений безопасности.
99
Вы также можете указать, $_SERVER['REMOTE_ADDR']
какой IP-адрес запрашиваемого клиента предоставлен веб-сервером.
$whitelist = array(
'127.0.0.1',
'::1'
);
if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
// not valid
}
Host: 127.0.0.1
и он будет заполненHTTP_HOST
, так что это вообще ненадежный метод.$whitelist = array('127.0.0.1', '::1');
Как дополнение, как функция ...
источник
Новые пользователи ОС (Win 7, 8) также могут счесть необходимым включить удаленный адрес в формате IPV6 в свой массив белого списка:
источник
$_SERVER["REMOTE_ADDR"]
должен сообщить вам IP-адрес пользователя. Хотя это подделка.Отметьте этот вопрос о вознаграждении для очень подробного обсуждения.
Я думаю, что то, что вы помните, с PHPMyAdmin - это нечто иное: многие серверы MySQL настроены так, что к ним можно получить доступ только с localhost из соображений безопасности.
источник
Извините, но все эти ответы кажутся мне ужасными. Я бы предложил перефразировать вопрос, потому что в некотором смысле все машины являются "локальными".
Вопрос должен быть; Как запустить разные пути кода в зависимости от того, на каком компьютере он выполняется.
На мой взгляд, самый простой способ - создать файл с именем DEVMACHINE или что угодно, а затем просто проверить
Не забудьте исключить этот файл при загрузке в среду живого хостинга!
Это решение не зависит от конфигурации сети, его нельзя подделать, и оно позволяет легко переключаться между запущенным «live-code» и «dev-code».
источник
Не похоже, что вам следует использовать
$_SERVER['HTTP_HOST']
, потому что это значение в заголовке http, которое легко подделать.Вы
$_SERVER["REMOTE_ADDR"]
тоже можете использовать , это более безопасное значение, но также можно подделать. Этоremote_addr
адрес, по которому Apache возвращает результат.источник
REMOTE_ADDR
можно подделать, однако, если вы хотите подделать его как127.0.0.1
или::1
, что требует компрометации машины, в которой подделка - меньшаяREMOTE_ADDR
из ваших проблем. Соответствующий ответ - stackoverflow.com/a/5092951/3774582Если вы хотите иметь белый список / список разрешений, который поддерживает статические IP-адреса и динамические имена .
Например:
Таким образом, вы можете установить список имен / IP-адресов, которые будут (наверняка) обнаружены. Динамические имена добавляют больше гибкости для доступа из разных точек.
У вас есть два общих варианта: вы можете указать имя в файле локальных хостов или просто использовать один поставщика динамических имен. который можно найти где угодно.
Эта функция КЭШЕТ результаты, потому что gethostbyname - очень медленная функция.
Для этой цели я реализовал эту функцию:
Для большей надежности вы можете заменить $ _SERVER ['REMOTE_ADDR'] на get_ip_address (), который @Pekka упомянул в своем сообщении как «этот вопрос о награде».
источник
Как насчет сравнения,
$_SERVER['SERVER_ADDR'] === $_SERVER['REMOTE_ADDR']
чтобы определить, находится ли клиент на той же машине, что и сервер?источник
$_SERVER['SERVER_ADDR']
не всегда надежно возвращает адрес сервера, например, при использовании балансировщиков нагрузки он возвращает IP-адрес балансировщика нагрузки, как я полагаю.Я нашел простой ответ.
Потому что на всех локальных дисках есть C: или D: или F: ... и т. Д.
Просто определите, является ли второй символ:
источник