PHP ip

Tema05

Известный
Автор темы
1,433
391
Есть 3 значения с ip: $_SERVER['HTTP_CLIENT_IP'], $_SERVER['HTTP_X_FORWARDED_FOR'], $_SERVER['REMOTE_ADDR'].
Хотел бы узнать что лучше использовать для идентификации пользователя?
Правильность получение ip мне не важна, главное чтобы он у всех был разный и не менялся со временем.

Также есть ли смысл юзать такой код?
PHP:
<?php
 
$client  = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote  = @$_SERVER['REMOTE_ADDR'];
 
if(filter_var($client, FILTER_VALIDATE_IP)) $ip = $client;
elseif(filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward;
else $ip = $remote;
 
echo $ip;
 
?>
 
Решение
Есть, это более точный показ IP
Нет, я уже лично объяснял все это автору вопроса раз 100, не меньше.

Человек выше абсолютно прав -- все остальные заголовки, кроме REMOTE_ADDR можно спокойно подменить. Код, который выложил автор - пабликовый, им пользуются миллионы новичков, но так и не понимают, что это бесполезно. Более того, в PHP категорически нельзя юзать игнорирование ошибок (@) - это может привести к катастрофическому фризу.

Чтобы увидеть пруфы слов выше, достаточно перейти в /etc/nginx/fastcgi.conf (если Вы не ньюфаг и у Вас стоит NGINX).
Там будет такая строка:
NGINX:
fastcgi_param  REMOTE_ADDR        $remote_addr;

fastcgi_param - думаю, понятно, что это параметры для работы FCGI и PHP...

Livarka

Известный
155
65
Есть 3 значения с ip: $_SERVER['HTTP_CLIENT_IP'], $_SERVER['HTTP_X_FORWARDED_FOR'], $_SERVER['REMOTE_ADDR'].
Хотел бы узнать что лучше использовать для идентификации пользователя?
Правильность получение ip мне не важна, главное чтобы он у всех был разный и не менялся со временем.

Также есть ли смысл юзать такой код?
PHP:
<?php

$client  = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote  = @$_SERVER['REMOTE_ADDR'];

if(filter_var($client, FILTER_VALIDATE_IP)) $ip = $client;
elseif(filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward;
else $ip = $remote;

echo $ip;

?>
Есть, это более точный показ IP
 

SCHWEITZER

Известный
104
71
Есть, это более точный показ IP
Нет, я уже лично объяснял все это автору вопроса раз 100, не меньше.

Человек выше абсолютно прав -- все остальные заголовки, кроме REMOTE_ADDR можно спокойно подменить. Код, который выложил автор - пабликовый, им пользуются миллионы новичков, но так и не понимают, что это бесполезно. Более того, в PHP категорически нельзя юзать игнорирование ошибок (@) - это может привести к катастрофическому фризу.

Чтобы увидеть пруфы слов выше, достаточно перейти в /etc/nginx/fastcgi.conf (если Вы не ньюфаг и у Вас стоит NGINX).
Там будет такая строка:
NGINX:
fastcgi_param  REMOTE_ADDR        $remote_addr;

fastcgi_param - думаю, понятно, что это параметры для работы FCGI и PHP.
REMOTE_ADDR - название переменной.
$remote_addr - значение переменной.

$remote_addr - это внутренняя-дефолтная переменная NGINX, как раз в ней хранится IP-адрес клиента. Соответственно, если запрос поступает на *file*.php, NGINX запустит PHP-процесс через FCGI с параметрами из fastcgi.conf, но в этом конфиге имеется только ОДНА ПЕРЕМЕННАЯ ДЛЯ ОПРЕДЕЛЕНИЯ IP-АДРЕСА И ЕЕ НЕВОЗМОЖНО ПОДДЕЛАТЬ.

Вот. На счет апача - не думаю, что его кто-то юзает. Если хостинг - вся та же самая картина, хостинг не будет менять дефолтный REMOTE_ADDR на какой нибудь X_REAL_REALNO_REALNIY_IP_CLIENTA_TRUE_PRAVDA.

Вот.
 

Tema05

Известный
Автор темы
1,433
391
Нет, я уже лично объяснял все это автору вопроса раз 100, не меньше.

Человек выше абсолютно прав -- все остальные заголовки, кроме REMOTE_ADDR можно спокойно подменить. Код, который выложил автор - пабликовый, им пользуются миллионы новичков, но так и не понимают, что это бесполезно. Более того, в PHP категорически нельзя юзать игнорирование ошибок (@) - это может привести к катастрофическому фризу.

Чтобы увидеть пруфы слов выше, достаточно перейти в /etc/nginx/fastcgi.conf (если Вы не ньюфаг и у Вас стоит NGINX).
Там будет такая строка:
NGINX:
fastcgi_param  REMOTE_ADDR        $remote_addr;

fastcgi_param - думаю, понятно, что это параметры для работы FCGI и PHP.
REMOTE_ADDR - название переменной.
$remote_addr - значение переменной.

$remote_addr - это внутренняя-дефолтная переменная NGINX, как раз в ней хранится IP-адрес клиента. Соответственно, если запрос поступает на *file*.php, NGINX запустит PHP-процесс через FCGI с параметрами из fastcgi.conf, но в этом конфиге имеется только ОДНА ПЕРЕМЕННАЯ ДЛЯ ОПРЕДЕЛЕНИЯ IP-АДРЕСА И ЕЕ НЕВОЗМОЖНО ПОДДЕЛАТЬ.

Вот. На счет апача - не думаю, что его кто-то юзает. Если хостинг - вся та же самая картина, хостинг не будет менять дефолтный REMOTE_ADDR на какой нибудь X_REAL_REALNO_REALNIY_IP_CLIENTA_TRUE_PRAVDA.

Вот.
Канешно спасибо за объяснение, но тема уже давно не актуальна. Я и забыл о ней.
 

Tema05

Известный
Автор темы
1,433
391
Больше, чем уверен -- ты бы еще раз задал такой же вопрос. Надеюсь, все доходчиво объяснил.
В этот раз он остался в истории, так что я могу ещё раз это прочитать.
 
  • Нравится
Реакции: SCHWEITZER

Hatrig

Известный
38
43
Добавлю к текущим ответам. Сам для получения IP адреса пользователя использую - $_SERVER['REMOTE_ADDR'] .
Однако, возможно ты столкнешься с работой с Cloudflare, на этот случай используй - $_SERVER["HTTP_CF_CONNECTING_IP"] .
 

Похожие темы

  1. Ответы
    2K
    Просмотры
    5M
  2. Ответы
    22
    Просмотры
    2M
  3. Ответы
    4K
    Просмотры
    1M