Хорошо, у меня небольшая проблема с аутентификацией. Моя веб-служба позволяет подключаться к моему API через HTTP с именем пользователя и паролем, но это соединение также может быть ограничено конкретным IP-адресом.
Это означает, что $_SERVER['REMOTE_ADDR']
может быть неправильным. Я уже знаю, что на любую IP-информацию нельзя действительно полагаться - у меня есть ограничение только в попытке добавить еще один уровень безопасности.
Если это общий обзор запроса на мой веб-сервер:
clientSERVER => clientPROXY => myPROXY => mySERVER
Тогда это означает, что mySERVER показывает REMOTE_ADDR
myPROXY, а не клиента и отправляет фактический IP-адрес клиента как HTTP_X_FORWARDED_FOR
.
Чтобы преодолеть это, моя веб-служба имеет список IP-адресов доверенного прокси, и если REMOTE_ADDR
находится на одном из этих надежных IP-адресов, он сообщает моей веб-службе, что фактический IP-адрес является значением HTTP_X_FORWARDED_FOR
.
Теперь проблема связана с clientPROXY. Это означает, что (довольно часто) mySERVER получает значение HTTP_X_FORWARDED_FOR
, которое имеет несколько IP-адресов. Согласно документации HTTP_X_FORWARDED_FOR
, это список разделенных запятыми IP-адресов, где первый IP-адрес действительного истинного клиента и каждый другой IP-адрес - это прокси-сервер.
Итак, если HTTP_X_FORWARDED_FOR
имеет несколько значений, а моя служба ограничена IP, мне нужно проверить "последнее" значение HTTP_X_FORWARDED_FOR
на мой разрешенный список IP и просто игнорировать фактический IP-адрес клиента?
Я предполагаю, что в системе, где я должен установить список разрешенных IP-адресов, белый IP-адрес должен быть адресом прокси-сервера, а не IP-адресом за прокси-сервером (поскольку это может быть какой-то IP-адрес localhost и часто меняются).
А что из HTTP_CLIENT_IP
?