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