Как определить, работает ли localhost

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

3 ответов


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

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

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

но это не должно вас беспокоить.


Я не уверен, что ответы до сих пор находятся на точке, но это может быть я, что смущен. Я отвечаю, в частности, на часть вашего вопроса, которая говорит: "недоступно через Интернет". Вот моя попытка ответить:--1-->

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

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

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


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