Как определить, работает ли на локальном хосте - PullRequest
8 голосов
/ 01 января 2011

У меня есть сценарий PHP, где я хотел бы определить, работает ли пользователь на локальном компьютере и недоступен через Интернет. В настоящее время я проверяю адрес сервера для него 127.0.0.1. Это лучшая практика или есть лучший способ?

Ответы [ 3 ]

12 голосов
/ 01 января 2011

Localhost всегда преобразуется в петлевой IP-адрес 127.0.0.1 в IPv4 или ::1 в IPv6, поэтому проверка IP в вашем приложении будет безопасной, если вы имеете в виду

if(IPAddress::In(array("127.0.0.1","::1")))
{
     //Show Application
}

Iсомневаюсь, что у вас будет команда элитных хакеров после вашего порта 80, но в качестве побочного замечания были некоторые разговоры о недостатках в использовании IP-адреса, так как пакеты TCP могут быть изменены.

Но это не должно бытьбеспокойство за тебя.

6 голосов
/ 01 января 2011

Я не уверен, что ответы на данный момент являются точными, но это может быть я, который смущен. Я отвечаю, в частности, на ту часть вашего вопроса, которая гласит: «Недоступно через Интернет». Вот моя попытка ответа:

Веб-сервер, а не PHP, прослушивает сокет и принимает подключения. PHP может получить информацию о соединении от $ _SERVER (http://www.php.net/manual/en/reserved.variables.server.php).. Имейте в виду, что все, что вы проверяете, это то, откуда пришло соединение - вы ничего не можете узнать о том, доступен ли ваш сервер через другие IP-адреса от $ _SERVER. Например, я могу получить доступ к своему локальному экземпляру Apache / PHP через любой из:

Итак, если вы планируете, что приложение будет вести себя по-разному, увидев "правильное" значение в $ _SERVER ["SERVER_ADDR"], вы, вероятно, довольно безопасны - то есть маловероятно, что пользователь может подделать его с удаленного клиента.

Сказав все это, я не буду использовать ни один из этих методов ни для аутентификации пользователей, ни для авторизации пользовательских привилегий / действий в развернутом приложении, которое доступно через Интернет. Единственным исключением может быть, если у вас есть целое приложение, которое доступно только при доступе из localhost - тогда этот метод, вероятно, имеет смысл и будет достаточно безопасным для личного приложения.

0 голосов
/ 01 января 2011

Вы также можете проверить имя хоста localhost, но если адрес сервера 127.0.0.1, он должен разрешиться. Это стандартная практика на ipv4. На ipv6 вы можете проверить :: 1, как предлагает Роберт Питт.

...