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/

Коментувати

Вміст цього поля є приватним і не буде доступний широкому загалу.
 dP   dP   dP  .d888b.  d8888888P  dP  888888ba  
88 88 88 Y8' `8P .d8' 88 88 `8b
88 .8P .8P d8bad8b .d8' 88 88 88
88 d8' d8' 88` `88 .d8' 88 88 88
88.d8P8.d8P 8b. .88 d8' 88 88 .8P
8888' Y88' Y88888P Y8888888P dP 8888888P

Уведіть код, зображений у стилі Ascii-Арт.