Каковы возможные возвращаемые значения для $_SERVER['REMOTE_ADDR'];?

StackOverflow https://stackoverflow.com/questions/1527098

  •  20-09-2019
  •  | 
  •  

Вопрос

При написании модуля входа в систему я хочу регистрировать IP-адреса в качестве дополнительной меры для проверки того, что тот, кто находится на другой стороне, все еще является тем же человеком на другой стороне.

Я использую $_SERVER['REMOTE_ADDR'] как один (из многих) способов получить IP-адрес удаленной машины.Помимо адреса IPv4 или IPv6, есть ли какие-либо другие значения, которые я должен ожидать, что это вернет?

Это было полезно?

Решение

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

Кроме того, вы можете потенциально раздражать законных пользователей.Подумайте о случае, когда человек может находиться в месте, где есть несколько бесплатных открытых точек доступа Wi-Fi.Когда они попадают на вашу страницу входа, они могут быть подключены к одной точке доступа, но к моменту входа в систему их компьютер, возможно, решил, что другой маршрутизатор является лучшим вариантом, и поэтому их IP изменится.Хотите верьте, хотите нет, но это может отпугнуть некоторых (хотя, очень немногие) легко разочаровывающиеся пользователи.

Честно говоря, я бы просто не стал утруждать себя.Использование SSL, если вы можете, обычно является лучшим способом избежать проблем безопасности, подобных той, которую вы описываете.Удачи вам в вашем проекте.

Другие советы

Согласно онлайн-документации PHP, должен быть возвращен только IP-адрес.

http://us.php.net/manual/en/reserved.variables.server.php

“'REMOTE_ADDR' (УДАЛЕННОЕ ДОБАВЛЕНИЕ)':

IP-адрес, с которого пользователь просматривает текущую страницу”.

Значением может быть IPv4 или IPv6-адрес.Хотя вы, вероятно, получите только канонические значения, имейте в виду, что IP-адреса могут быть записаны несколькими способами. 192.0.2.1 это то же самое , что 192.000.002.001, 2001:db8::1 это то же самое , что 2001:0db0:0000:0000:0000:0000:0000:0001, и т.д.Адреса IPv4 даже могут быть записаны в нотации IPv6, например ::ffff:192.0.2.1 или ::ffff:c000:0201 если веб-сервер принимает соединения IPv4 через сокеты IPv6.Я часто вижу это в системах Linux.

Протоколирование IP-адресов не должно быть проблемой до тех пор, пока вы резервируете достаточно места.На самом деле использование IP-адресов для контроля доступа в наши дни становится все более и более сложным.Поскольку в больших частях мира закончились новые IPv4-адреса, вы увидите, что интернет-провайдерам приходится широко использовать NAT, чтобы продолжать подключать новых клиентов к Интернету IPv4.Эти крупномасштабные NATs будут использовать пул общедоступных IPv4-адресов, возможно, для тысяч клиентов.Один IP-адрес может использоваться многими клиентами, и в конечном итоге один клиент может использовать разные адреса из пула.

При отслеживании IPv6 IP-адрес должен учитывать и другие факторы.Исходный механизм автоматической настройки IPv6 основан на использовании MAC-адреса как части IPv6-адреса.Из соображений конфиденциальности большинство операционных систем теперь используют (своего рода) случайно сгенерированный идентификатор интерфейса (обычно последние 64 бита адреса) для исходящих соединений, и эти биты могут меняться со временем.Некоторые операционные системы (Mac OS X) даже ведут статистику о том, работает ли IPv4 или IPv6 быстрее, и я видел, как клиенты время от времени переключаются между IPv4 и IPv6.

И тогда у вас могут быть пользователи, которые перемещаются из одной точки доступа беспроводной связи или офисной сети в другую, тем самым переключая IP-адреса.

Поэтому я думаю, что протоколирование IP-адресов может иметь смысл в зависимости от того, что вы хотите сделать с данными, но использование их как (части) формы контроля доступа может вызвать больше проблем, чем того стоит.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top