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/

Add new comment

The content of this field is kept private and will not be shown publicly.
 8888ba.88ba    88888888b  888888ba    .88888.           dP 
88 `8b `8b 88 88 `8b d8' `8b 88
88 88 88 a88aaaa 88 88 88 88 88
88 88 88 88 88 88 88 db 88 88
88 88 88 88 88 88 Y8. Y88P 88. .d8P
dP dP dP dP dP dP `8888PY8b `Y8888'

Enter the code depicted in ASCII art style.