Profile picture for Admin

На shared хостингах вместо айпишников пользователей детектится айпи сервера.

Для обхода этой ошибки можно юзать $_SERVER['HTTP_X_REAL_IP'] или $_SERVER['X_FORWARDED_FOR'] или посмотреть в phpinfo() где детекстится верно и подставить.

 

REMOTE_ADDR — содержит IP адрес непосредственно обращающегося к нему nginx, в нашем случае 127.0.0.1

HTTP_X_FORWARDED_FOR — содержит цепочку прокси адресов и последним идёт IP непосредственного клиента обратившегося к прокси серверу. И тут рассмотрим два частных случая:

Не каскадное проксирование. В HTTP_X_FORWARDED_FOR последним или единственным IP адресом (в зависимости от того что прислал/не прислал пользователь в заголовке x-forwarded-for) будет реальный, искомый, тот самый адрес пользователя.

 Казалось бы ну в чем проблема парсить эту переменную и доставать оттуда последний элемент. Но в нашем случае настройки не были до конца корректными и весь HTTP_X_FORWARDED_FOR заменялся заголовком от браузера x-forwarded-for, а должен был приклеивать к нему реальный IP непосредственного пользователя.

 Для примера проверил на промышленном vps хостинге:

Доверять таким данным тоже страшновато, но если всё правильно сделано в настройках то последним IP будет адресс пользователя, вне зависимости от того что придёт в заголовках.

Каскадное проксирование. В этом случае действительно HTTP_X_FORWARDED_FOR — содержит цепочку прокси адресов и последним идёт IP непосредственного клиента обратившегося к прокси серверу. Но это не реальный IP пользователя, а всего лишь IP предыдущей прокси в списке.

Казалось бы ну в чем проблема парсить эту переменную и доставать оттуда первый элемент. Но как было показано выше на рисунке, это уж точно не корректные данные и пользователь может нас ввести в заблуждение в два счёта, прислав в x-forwarded-for первым элементом какой захочет IP

HTTP_X_REAL_IP (или любая другая переменная на которую договорятся Админ и Разраб) — содержит IP обращающегося к php пользователя или первой от сервера недоверенной прокси (что для нас равно адресу клиента)

На хабре подробный разбор данной проблемы http://habrahabr.ru/post/177113/

Добавить комментарий

Содержимое данного поля является приватным и не предназначено для показа.
  .d888888   .d888b.   .88888.    .88888.    dP    dP 
d8' 88 Y8' `88 d8' `88 d8' `8b Y8. .8P
88aaaaa88a `8bad88 88 88 88 Y8aa8P
88 88 `88 88 YP88 88 db 88 d8' `8b
88 88 d. .88 Y8. .88 Y8. Y88P 88 88
88 88 `8888P `88888' `8888PY8b dP dP

Введите код, изображенный в стиле ASCII-арт.