Какой самый надежный способ получения IP-адреса пользователя?

Я использую $_SERVER["REMOTE_ADDR"] получить IP-адрес пользователя за месяцы. В последнее время я заметил, что это значение может иногда содержать IP-адрес прокси-сервера, а не IP-адрес пользователя, что делает его бесполезным для меня. (Я заметил эту проблему после того, как обновил до PHP 7.1.0, хотя я попытался перейти на предыдущую версию PHP, и результаты были идентичны).

Я прочитал тонны SO вопросов, и большинство из них только решают эту проблему без решения или предлагают следующую функцию в качестве решения:

function get_ip() {
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'UNKNOWN';

return $ipaddress;
}

Это также ненадежно, потому что эти разные переменные могут быть подделаны.

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

0

Решение

Используйте эту функцию ниже;

   function checkIPAddress()
{
// Get IP Address using $_SERVER['REMOTE_ADDR'];
$ipaddress = ($_SERVER('REMOTE_ADDR')) ? $_SERVER('REMOTE_ADDR') : '';

if ( filter_var ($ipaddress, FILTER_VALIDATE_IP) == false)
{
//Log bad IP attempt
}
else{
//Received valid IP Address, run next code here.
}

}

Разрешить HTTP_X_FORWARDED — вредная привычка. Используйте его, когда вы используете прокси-сервер, балансировку нагрузки или при необходимости и т. Д.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]