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