编程语言
首页 > 编程语言> > PHP是2017年获得真实用户IP地址的最准确/最安全的方式

PHP是2017年获得真实用户IP地址的最准确/最安全的方式

作者:互联网

通过PHP获取用户IP地址的最准确方法是什么?

我已经阅读了很多关于它的SO问题和答案,但大多数答案都是陈旧的,用户评论说这些方法是不安全的.

例如,看看这个问题(2011):How to get the client IP address in 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是不安全的,因为下面的评论强调:

Do NOT use the above code unless you know EXACTLY what it does! I’ve
seen MASSIVE security holes due to this. The client can set the
X-Forwarded-For or the Client-IP header to any arbitrary value it
wants. Unless you have a trusted reverse proxy, you shouldn’t use any
of those values.

由于我完全不知道它的作用,我不想承担风险.他说它不安全,但没有提供一种安全的方法来获取用户的IP地址.

我尝试过简单的$_SERVER [‘REMOTE_ADDR’] ;,但这会返回错误的IP.我已经测试了这个,我的真实IP遵循这种模式:78.57.xxx.xxx,但我得到的IP地址如下:81.7.xxx.xxx

所以你有什么想法吗?

解决方法:

简短回答:

$ip = $_SERVER [‘REMOTE_ADDR’];

截至2019年$_SERVER [‘REMOTE_ADDR’];获取用户IP地址是唯一可靠的方法,但如果在代理服务器后面,它可能会显示错误的结果.
所有其他解决方案都意味着安全风险或可能很容易被伪造.

标签:php,security,ip,proxy,reverse-proxy
来源: https://codeday.me/bug/20191005/1856452.html