Заголовки: 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 ViaForwarded- Что такое 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