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

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

Solutions Collecting From Web of "Как определить, работает ли на localhost"

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

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

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

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

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

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

  • http: // localhost / ($ _SERVER ["SERVER_ADDR"] => :: 1)
  • http://127.0.0.1/ ($ _SERVER ["SERVER_ADDR"] => 127.0.0.1)
  • http://192.168.75.121/ ($ _SERVER ["SERVER_ADDR"] => 192.168.75.121)
  • http: //shiva.local/ ($ _SERVER ["SERVER_ADDR"] => fe80 :: 21c: 42ff: fe00: 8)

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

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

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