Spec-Zone.ru › HTTP

Заголовки: X-Forwarded-For

Заголовок X-Forwarded-For

HTTP X-Forwarded-For (XFF) — это заголовок запроса, который де-факто является стандартом для определения исходного IP-адреса клиента, подключающегося к веб-серверу через прокси-сервер.

Стандартизированной версией этого заголовка является HTTP-заголовок Forwarded, хотя он используется гораздо реже.

Предупреждение: Неправильное использование этого заголовка может представлять угрозу безопасности. Подробнее см. в разделе Вопросы безопасности и конфиденциальности.

Тип заголовка Заголовок запроса
Запрещённый заголовок запроса Нет

Синтаксис

X-Forwarded-For: <client>, <proxy>
X-Forwarded-For: <client>, <proxy>, …, <proxyN>

Например, в первом заголовке указан IPv6-адрес клиента, во втором — IPv4-адрес клиента, а в третьем примере — IPv4-адрес клиента и IPv6-адрес прокси:

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

Директивы

<client>

IP-адрес клиента.

<proxy>

IP-адрес прокси. Если запрос проходит через несколько прокси, указываются IP-адреса каждого последующего прокси. Это означает, что крайний правый IP-адрес принадлежит последнему прокси, а крайний левый — исходному клиенту (при условии, что клиент и прокси работают корректно).

Описание

Когда клиент подключается к серверу напрямую, IP-адрес клиента передаётся серверу и часто записывается в журналы доступа сервера. Если соединение клиента проходит через прямые или обратные прокси, сервер видит только IP-адрес последнего прокси, который часто мало что даёт. Это особенно верно, если последний прокси — балансировщик нагрузки, являющийся частью той же инфраструктуры, что и сервер. Чтобы передать серверу более полезный IP-адрес клиента, используется заголовок запроса X-Forwarded-For.

Подробные рекомендации по использованию X-Forwarded-For см. в разделах Разбор и Выбор IP-адреса.

Вопросы безопасности и конфиденциальности

Этот заголовок по своей природе раскрывает информацию, чувствительную с точки зрения конфиденциальности, например IP-адрес клиента. Поэтому при использовании этого заголовка необходимо учитывать конфиденциальность пользователя.

Если вы знаете, что все прокси в цепочке запроса являются доверенными (то есть вы контролируете их) и правильно настроены, то частям заголовка, добавленным вашими прокси, можно доверять. Если какой-либо прокси является вредоносным или неправильно настроен, любая часть заголовка, добавленная не доверенным прокси, может быть подделана или иметь неожиданный формат либо содержимое. Если к серверу можно подключиться напрямую из интернета — даже если он также находится за доверенным обратным прокси, — ни одну часть списка IP-адресов X-Forwarded-For нельзя считать надёжной или безопасной для использования в целях безопасности.

Любое использование X-Forwarded-For в целях безопасности (например, для ограничения частоты запросов или управления доступом на основе IP-адреса) должно использовать только IP-адреса, добавленные доверенным прокси. Использование ненадёжных значений может привести к обходу ограничителя частоты запросов, обходу контроля доступа, исчерпанию памяти и другим негативным последствиям для безопасности или доступности.

Крайние левые (недоверенные) значения можно использовать только в случаях, когда поддельные значения не приведут к негативным последствиям.

Разбор

Неправильный разбор заголовка X-Forwarded-For может негативно повлиять на безопасность и привести к последствиям, описанным в предыдущем разделе. Поэтому при разборе значений заголовка следует учитывать следующие моменты.

В запросе может присутствовать несколько заголовков X-Forwarded-For. IP-адреса в этих заголовках необходимо рассматривать как единый список, начиная с первого IP-адреса первого заголовка и заканчивая последним IP-адресом последнего заголовка. Есть два способа сформировать такой единый список:

  • объединить полные значения всех заголовков X-Forwarded-For через запятую, а затем разделить полученную строку по запятым, чтобы получить список; или
  • разделить каждый заголовок X-Forwarded-For по запятым, чтобы получить списки, а затем объединить эти списки.

Использовать только один из нескольких заголовков X-Forwarded-For недостаточно.

Некоторые обратные прокси автоматически объединяют несколько заголовков X-Forwarded-For в один, однако безопаснее не полагаться на это.

Выбор IP-адреса

При выборе адреса необходимо использовать полный список IP-адресов (из всех заголовков X-Forwarded-For).

При выборе адреса X-Forwarded-For, ближайшего к клиенту (ненадёжного и не предназначенного для целей безопасности), следует выбрать первый адрес слева, который является допустимым адресом и не является частным/внутренним.

Примечание: Выше мы говорим «допустимый адрес», потому что поддельные значения могут не быть реальными 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 можно сделать вывод, что IP-адрес клиента — 203.0.113.195, а запрос прошёл через два прокси. Первый прокси имеет IPv6-адрес 2001:db8:85a3:8d3:1319:8a2e:370:7348, а последний прокси в цепочке запроса — IPv4-адрес 198.51.100.178:

X-Forwarded-For: 203.0.113.195,2001:db8:85a3:8d3:1319:8a2e:370:7348,198.51.100.178

Спецификации

Не входит ни в одну из действующих спецификаций. Стандартизированной версией этого заголовка является Forwarded.

См. также

  • заголовки X-Forwarded-Host, X-Forwarded-Proto
  • Via
  • Forwarded
  • Что такое X-Forwarded-For и когда ему можно доверять? httptoolkit.com (2024)

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API