почему иногда не могу прочитать IP-адрес, эта функция - PullRequest
0 голосов
/ 04 ноября 2011

Я использую эту функцию, чтобы получить IP-адрес пользователя на моем сайте, но иногда он не может прочитать ipaddress. Я не знаю, что пользователь может скрыть IPaddress или нет? Если пользователь может сделать это, то как я могу получить IP-адрес или любое другое решение для идентификации локального компьютера пользователя, чтобы я мог запретить этому компьютеру открывать мой сайт.

Любое предложение будет с благодарностью.

function GetIP()
{
    if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
        $ip = getenv("HTTP_CLIENT_IP");
    else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
        $ip = getenv("HTTP_X_FORWARDED_FOR");
    else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
        $ip = getenv("REMOTE_ADDR");
    else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
        $ip = $_SERVER['REMOTE_ADDR'];
    else
        $ip = "unknown";
    return($ip);
}

Большое спасибо.

Ответы [ 4 ]

2 голосов
/ 04 ноября 2011

Обычно просто echo $_SERVER['REMOTE_ADDR']; должен делать эту работу. В противном случае объясните нам, что вы имеете в виду под словом «иногда он не читает IPaddress»

0 голосов
/ 04 ноября 2011

единственный IP-адрес, который вы можете получить из среды, это REMOTE_ADDR один.
Другие глупые строки в вашем коде - не более чем заголовки HTTP, необязательные. Может быть подделан, опущен, иметь неправильный формат, быть пустым и т. Д.

Я оставляю вам заключение.

0 голосов
/ 04 ноября 2011

Короткий ответ: 100% гарантированного способа получения IP-адреса пользователя не существует - $_SERVER['REMOTE_ADDR'] - ваш лучший выбор, но даже это не на 100% надежно, особенно для пользователей в сетях.

Все, что передается по HTTP от клиента, может быть заблокировано / подделано.

С другой стороны, проще решить проблему - гораздо проще (и безопаснее) получить доступ к белому списку, чем к черному списку.это - если вы можете работать таким образом, я бы пошел на это.Требуется только что-то вроде простого (в конфигурации Apache .htaccess или vhost):

Deny from all
Allow from mydomain.com
0 голосов
/ 04 ноября 2011

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

В зависимости от вашего сайта, лучший способ запретить кому-либо доступ - использовать аутентификацию пользователя (логин).

...