Php/ajax REMOTE_ADDR установлен на IP-адрес фиктивного сетевого адаптера

Сегодня я столкнулся с довольно странным поведением моего основанного на php приложения. В определенной части системы пользовательский интерфейс, использующий AJAX-вызовы для заполнения списка коробки с содержимым из бэкэнда.

Теперь слушатель AJAX выполняет проверку безопасности всех входящих запросов, убедившись, что что только действительные клиентские IP-адреса получают ответы. Действительный IP-адрес также хранится в бэкэнде.

Чтобы получить IP-адрес клиента, я использовал простой старый

$_SERVER['REMOTE_ADDR']

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

Googling around agve me Запись в блоге Roshan по топологии:

function getRealIpAddr()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet
    {
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))//check ip is pass from prxy
    {
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
      $ip=$_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

К сожалению, проблема не устранена.

Кто-нибудь когда-либо спотыкался на эту проблему (на самом деле я не думаю, что я обнаружил совершенно новую проблему ^^), и у меня есть идея, как это исправить?

EDIT:

Я нахожусь на

  • Версия PHP 5.2.9-1
  • Apache/2.2.9 (Win32)

Связь осуществляется с помощью обычной сетевой карты. Теперь у экземпляра клиента несколько устройств больше. Адаптеры VMNet и т.д.

Мне интересно, как конфигурация клиента может "нарушить" веб-сервер так много...

ТИА

K

Ответ 1

К сожалению, вам нужно взять всю информацию о IP-адресе с солью.

IP-адреса собираются во время запроса, принимая во внимание информацию о пакете и запросе. К сожалению, эта информация может быть легко подделана или даже ошибочна (на основе большого числа сетевых вероятностей) и не должна использоваться ни для чего более, чем для тщеславия.