Сегодня я столкнулся с довольно странным поведением моего основанного на 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