Каков самый точный способ получить IP-адрес пользователя в 2017 году через PHP?
Я прочитал много SO вопросов и ответов об этом, но большинство ответов устарело и прокомментировано пользователями, что эти способы небезопасны.
Например, взгляните на этот вопрос (2011): Как получить IP-адрес клиента на PHP?
В ответе Тима Кеннеди содержится рекомендация использовать что-то вроде:
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
Но, как я много читал, я видел, что использовать X_FORWARDED_FOR
небезопасно, так как в комментарии ниже подчеркивается:
НЕ используйте приведенный выше код, если не знаете ТОЧНО, что он делает! Я из-за этого были обнаружены дыры в безопасности MASSIVE. Клиент может установить X-Forwarded-For или заголовок Client-IP для любого произвольного значения хочет. Если у вас нет доверенного обратного прокси, вы не должны использовать этих значений.
Как я не знал ТОЧНО, что он делает, я не хочу рисковать. Он сказал, что это небезопасно, но не предоставил безопасный метод для получения IP-адреса пользователя.
Я пробовал простой $_SERVER['REMOTE_ADDR'];
, но это возвращает неправильный IP. Я тестировал это, и мой реальный IP следует этому шаблону: 78.57.xxx.xxx
, но я получаю IP-адрес, например: 81.7.xxx.xxx
У вас есть идеи?