Надежность PHP _SERVER ['REMOTE_ADDR'] - PullRequest
10 голосов
/ 16 июля 2011

Я создаю сайт, который предназначен для администрирования с локального хоста, но содержит страницы, которые предоставляют данные пользователям Интернета или локальной сети. Могу ли я рассчитывать на PHP $ _ SERVER ['REMOTE_ADDR'] в качестве безопасного / надежного способа идентификации пользователя как локального хоста? Спасибо!

Edit: Чтобы уточнить, меня интересует только определение того, исходит ли запрос от localhost (возможно, есть лучший способ).

Ответы [ 3 ]

11 голосов
/ 16 июля 2011

Эта переменная заполнена данными, предоставленными Apache (или другим демоном веб-сервера), и должна быть надежной при определении IP-адреса на другом конце соединения, да.Проверьте 127.xxx (почти всегда 127.0.0.1) и :: 1 (для IPv6).Как говорит Сеница, он не всегда может существовать (например, при запуске из командной строки, а не через веб-сервер).Но если он заполнен, он должен быть надежным.

Чтобы иметь возможность его подделать, кому-то уже нужен довольно обширный доступ к вашей сети и системе таким образом, от которого вы все равно не сможете защитить с помощью PHP.

0 голосов
/ 01 июня 2013

Обычно это не относится к соединениям с локального хоста, но вы должны учитывать прокси.Если удаленный конец использует прокси-сервер HTTP, $_SERVER['REMOTE_ADDR'] будет содержать IP-адрес этого прокси, а не IP-адрес самого клиента.

Однако, если это прокси-сервер с отключенными настройками конфиденциальности,тогда вы можете получить IP-адрес клиента, используя следующий фрагмент:

// will be set by the proxy if no privacy is enabled:
if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    return $_SERVER['HTTP_X_FORWARDED_FOR'];
} else if(isset($_SERVER['REMOTE_ADDR'])) {
    return $_SERVER['REMOTE_ADDR'];
}

Но если ваш клиент использует прокси-сервер HTTP с включенной конфиденциальностью, у вас не будет возможности получить IP-адрес клиента..


Подсказка по безопасности (спасибо @deceze) Обратите внимание, что если вы используете заголовок HTTP_X_FORWARDED_FOR, злоумышленникам будет легко подделать их IP.Хотя это возможно и с использованием других методов, с заголовком HTTP_X_FORWARDED_FOR это будет очень просто.Вы были предупреждены.Но в любом случае веб-приложение никогда не должно использовать информацию об IP для безопасности, поэтому это просто примечание

0 голосов
/ 16 июля 2011

Нет. От веб-сервера зависит, обслуживается ли remote_addr или нет.

RETRACT THAT. .. думал о HTTP_REFERER.

Он должен дать вам IP-адрес ... да. Помните, что могут быть прокси.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...