Как правильно использовать HTTP _X _FORWARDED _FOR?

Хорошо, у меня небольшая проблема с аутентификацией. Мой веб-сервис позволяет подключаться к моему API через HTTP с именем пользователя и паролем, но это соединение также может быть ограничено определенным IP-адресом.

Это означает, что $_SERVER['REMOTE_ADDR']может быть неправильным. Я уже знаю, что на любую IP-информацию никогда нельзя полагаться по-настоящему. -У меня есть ограничение только в попытке добавить еще один уровень безопасности.

Если это общий обзор запроса к моему веб-серверу:

clientSERVER => clientPROXY => myPROXY => mySERVER

Тогда это означает, что mySERVER показывает REMOTE_ADDRmyPROXY вместо 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?

35
задан Thibault 27 November 2014 в 08:39
поделиться