Как можно корректно идентифицировать IP-адрес пользователя?

Как определить IP-адрес пользователя настоящим образом, если переменная $_SERVER['REMOTE_ADDR'] больше не является надежным инструментом из-за использования прокси-серверов?
  • 16 марта 2024 г. 14:09
Ответы на вопрос 2
Существует несколько способов идентифицировать IP-адрес пользователя более корректно:

1. Использовать заголовок X-Forwarded-For. Этот заголовок передается прокси-серверами и содержит реальный IP-адрес пользователя. Однако, следует учитывать, что этот заголовок может быть легко подделан.

2. Использовать информацию о заголовке HTTP_CLIENT_IP. В нем также может быть указан IP-адрес пользователя.

3. Использовать сервисы третьих сторон, такие как GeoIP, которые помогают идентифицировать IP-адрес пользователя и предоставляют дополнительную информацию о его местоположении.

4. Применять комбинацию различных методов и проверок для более точной идентификации IP-адреса пользователя.

В целом, для более надежной идентификации IP-адреса пользователя необходимо использовать несколько методов одновременно и быть готовым к возможности подделки или скрытия IP-адреса со стороны пользователей.
$_SERVER['REMOTE_ADDR'] устанавливает твой веб сервер, ему вы доверяете. 
Но, если пользователь заходит через прокси сервер - то тут будет выходной ip адрес этого прокси.

Если прокси сервер не скрывает информацию о своих клиентах то
$_SERVER['HTTP_X_FORWARDED_FOR'] и $_SERVER['HTTP_CLIENT_IP'] должны содержать ожидаемое, но это значит нужно доверять этому прокси серверу.

Хочешь узнать реальный ip адрес, используй javascript в браузере пользователя (т.е. придется доверять уже пользователю в плане, а отреверсит ли он твой код и не подсунет что угодно).

Cамый известный и достаточно надежный способ (его сразу отключают любые адекватные анонимизеры) - это WebRTC. Технология позволяет двум браузерам открывать прямое соединение (да еще и udp) друг с другом, а веб сервер только организует процесс. Т.е. подняв соответствующего клиента WebRTC (погугли, правда я для php с ходу готовой библиотеки не нашел) и организовав подключение клиента с этим твоим сервером, который представляется обычным веб клиентом), ты сможешь по тому, с какого ip адреса пришло соответствующее соединение, определить настоящий, даже если пользователь использует прокси.

Это не защитит от vpn, тут никакими способами определить ip адрес пользователя не получится, потому что с точки зрения сетевых технологий, vpn - это как бы проводок пользовательского компьютера подключили к vpn-серверу, и никакие коммуникации не пойдут иначе, если пользователь не укажет иного (можно настроить маршрутизацию на выход через разные шлюзы в зависимости от геолокации, кстати этим можно воспользоваться, разместив кучу своих серверов в разных локациях и, обращаясь к ним из браузера клиента, сравнивать ip адреса)
Похожие вопросы