X-Forwarded-For
X-Forwarded-For
Заголовок запроса X-Forwarded-For (XFF) является фактическим стандартом для определения исходного IP-адреса клиента, подключающегося к веб-серверу через прокси-сервер.
Предупреждение: Неправильное использование этого заголовка может представлять собой угрозу безопасности. Подробности см. в разделе Вопросы безопасности и конфиденциальности.
Когда клиент подключается напрямую к серверу, IP-адрес клиента отправляется на сервер (и часто записывается в журналы доступа сервера). Но если соединение клиента проходит через любой прямой или обратный прокси, сервер видит только IP-адрес конечного прокси, который часто малополезен. Это особенно актуально, если конечный прокси является балансировщиком нагрузки, который входит в одну установку с сервером. Таким образом, для предоставления более полезного IP-адреса клиента серверу используется заголовок запроса X-Forwarded-For.
Подробные рекомендации по использованию этого заголовка см. в разделах Разбор и Выбор IP-адреса.
| Тип заголовка | Заголовок запроса |
|---|---|
| Запрещённое имя заголовка | нет |
Стандартизированная версия этого заголовка — HTTP-заголовок Forwarded.
Вопросы безопасности и конфиденциальности
По своей природе этот заголовок раскрывает конфиденциальную информацию, например, IP-адрес клиента. Поэтому при развертывании этого заголовка необходимо учитывать конфиденциальность пользователя.
Заголовок X-Forwarded-For является ненадежным, когда между клиентом и сервером нет надёжного обратного прокси (например, балансировщика нагрузки). Если клиент и все прокси являются добросовестными и ведут себя корректно, то список IP-адресов в заголовке имеет значение, описанное в разделе Директивы. Но если существует риск, что клиент или любой прокси является злонамеренным или неправильно настроенным, то любой фрагмент (или весь) заголовка может быть подделан (и может вообще не быть списком или не содержать IP-адресов).
Если между клиентом и сервером находятся какие-либо надёжные обратные прокси, то конечные IP-адреса X-Forwarded-For (по одному для каждого надёжного прокси) являются надёжными, поскольку они были добавлены надёжными прокси. (Это справедливо, пока сервер только доступен через эти прокси, а не напрямую).
Любое использование заголовка X-Forwarded-For в целях безопасности (например, для ограничения скорости или управления доступом на основе IP) должно использовать только IP-адреса, добавленные надёжным прокси. Использование ненадежных значений может привести к обходу ограничений скорости, обходу контроля доступа, исчерпанию памяти или другим негативным последствиям для безопасности или доступности.
Напротив, левые (ненадежные) значения должны использоваться только там, где не будет негативного воздействия от возможности использования поддельных значений.
Синтаксис
X-Forwarded-For: <client>, <proxy1>, <proxy2>
Элементы разделены запятыми, при этом необязательно наличие пробелов вокруг запятых.
Директивы
- <client>
-
IP-адрес клиента
- <proxy1>, <proxy2>
-
Если запрос проходит через несколько прокси, IP-адреса каждого последующего прокси перечисляются. Это означает, что при добросовестном поведении клиента и прокси, самый правый IP-адрес — это IP-адрес последнего прокси, а самый левый — IP-адрес исходного клиента.
Примеры
X-Forwarded-For: 2001:db8:85a3:8d3:1319:8a2e:370:7348 X-Forwarded-For: 203.0.113.195 X-Forwarded-For: 203.0.113.195, 2001:db8:85a3:8d3:1319:8a2e:370:7348 X-Forwarded-For: 203.0.113.195,2001:db8:85a3:8d3:1319:8a2e:370:7348,150.172.238.178
Разбор
Неправильный разбор заголовка X-Forwarded-For может привести к использованию поддельных значений в целях безопасности, что, в свою очередь, может привести к негативным последствиям, описанным выше.
В запросе может присутствовать несколько заголовков X-Forwarded-For (в соответствии с RFC 2616). IP-адреса в этих заголовках должны обрабатываться как единый список, начиная с первого IP-адреса первого заголовка и заканчивая последним IP-адресом последнего заголовка. Существует два способа создания этого единого списка:
- объединить значения полных заголовков
X-Forwarded-Forзапятыми, а затем разделить полученную строку по запятым на список, или - разделить каждый заголовок
X-Forwarded-Forпо запятым на списки, а затем объединить списки
Использовать только один из нескольких заголовков X-Forwarded-For недостаточно.
(Некоторые обратные прокси автоматически объединяют несколько заголовков X-Forwarded-For в один, но безопаснее не полагаться на это.)
Выбор IP-адреса
При выборе адреса необходимо использовать полный список IP-адресов — из всех заголовков X-Forwarded-For.
При выборе ближайшего к клиенту IP-адреса клиента (ненадежного и не предназначенного для задач безопасности), следует выбрать первый IP-адрес слева, который является валидным адресом и не является частным/внутренним. ("Валидный", потому что поддельные значения могут вообще не являться IP-адресами; "не внутренний/частный", потому что клиенты могут использовать прокси на своей внутренней сети, которые могут добавить адреса из частного IP-пространства.)
При выборе первого надёжного IP-адреса клиента X-Forwarded-For, требуется дополнительная настройка. Существуют два распространённых метода:
- Количество надёжных прокси: настраивается количество обратных прокси между интернетом и сервером. Список IP-адресов
X-Forwarded-Forпросматривается справа налево, начиная с отсчёта, на единицу меньшего, чем это количество. (Например, если есть только один обратный прокси, этот прокси добавит IP-адрес клиента, поэтому используется самый правый адрес. Если есть три обратных прокси, последние два IP-адреса будут внутренними.) - Список надёжных прокси: настраиваются IP-адреса или диапазоны IP-адресов надёжных обратных прокси. Список IP-адресов
X-Forwarded-Forпросматривается справа налево, пропуская все адреса, которые находятся в списке надёжных прокси. Первый несовпадающий адрес — целевой адрес.
Первый надёжный IP-адрес X-Forwarded-For может принадлежать ненадежному промежуточному прокси, а не фактическому компьютеру клиента, но он является единственным подходящим IP-адресом для использования в целях безопасности.
Обратите внимание, что если к серверу можно подключиться напрямую из интернета — даже если он также находится за надёжным обратным прокси — ни одна часть списка IP-адресов X-Forwarded-For не может считаться надёжной или безопасной для использования в целях безопасности.
Спецификации
Не является частью какой-либо текущей спецификации. Стандартизированная версия этого заголовка — Forwarded.
См. также
© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For