Подмена IP адреса

Некоторые сайты берут реальный IP из переданных заголовков, например из X-Forwarded-For или Client-IP. Пример из Joomla VirtueMart:

real-ip-headers.php
function getUserIP()
{
  $ip = "";
 
  if (isset($_SERVER))
  {
    if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
      $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    } elseif (isset($_SERVER["HTTP_CLIENT_IP"])) {
      $ip = $_SERVER["HTTP_CLIENT_IP"];
    } else {
      $ip = $_SERVER["REMOTE_ADDR"];
    }
  }
  else {
    if ( getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
      $ip = getenv( 'HTTP_X_FORWARDED_FOR' );
    } elseif ( getenv( 'HTTP_CLIENT_IP' ) ) {
      $ip = getenv( 'HTTP_CLIENT_IP' );
    } else {
      $ip = getenv( 'REMOTE_ADDR' );
    }
  }
  return $ip;
}

Nginx такие заголовки передает на бекенд, если сконфигурирован так:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Такой заголовок возможно подменить через расширение Хрома Header Hacker

Ставим расширение Header Hacker в хром

Настраиваем заголовки

Жмем по иконке расширения, ставим следующие по порядку поля:

Подмена региона
X-Forwarded-For
Replace With
197.80.200.1
(оставляем пустым)

Жмем кнопку «Add».

Запускаем

Идем на любую страницу сайта, жмем по иконке расширения «Header Hacker», выбирая опцию «Подмена региона».

Перезагружаем страницу, видим изменения, связанные с регионом (IP из примера - Кейптаун, Африка)

Так можно убедиться что заголовок действительно передали: