Надежность PHP $ _SERVER

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

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

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

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

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

ВЕРНУТЬСЯ, ЧТО. .. думал о HTTP_REFERER.

Он должен дать вам адрес ip … да. Помните, что может быть прокси.

Обычно это не относится к соединениям с localhost, но вы должны учитывать прокси. Если удаленный конец использует прокси-сервер 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 для обеспечения безопасности, поэтому это просто примечание