找到真实的IP地址

时间:2012-06-08 16:05:39

标签: php ip

两部分问题。

首先,当我尝试在隐藏的输入字段中回显IP地址时,我的表单停止提交。我有jquery来验证一些输入,并且当该地址中存在ip地址时它都会停止。

其次,我收到的IP地址不是我在登记终端时找到的地址。为什么我的网站是通过Godaddy托管的,显示的是代理ip而不是我的机器ip?

这是我正在使用的代码。

function ipCheck() {
    if (getenv('HTTP_CLIENT_IP')) {
        $ip = getenv('HTTP_CLIENT_IP');
    }
    elseif (getenv('HTTP_X_FORWARDED_FOR')) {
        $ip = getenv('HTTP_X_FORWARDED_FOR');
    }
    elseif (getenv('HTTP_X_FORWARDED')) {
        $ip = getenv('HTTP_X_FORWARDED');
    }
    elseif (getenv('HTTP_FORWARDED_FOR')) {
        $ip = getenv('HTTP_FORWARDED_FOR');
    }
    elseif (getenv('HTTP_FORWARDED')) {
        $ip = getenv('HTTP_FORWARDED');
    }
    else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    //$ip = str_replace('.','', $ip);
    return $ip;
}

1 个答案:

答案 0 :(得分:2)

您的代码允许任何呼叫者指定他们想要的任何IP地址(即IP欺骗)。

攻击者必须做的就是使用X-Forwarded-For: 123.123.123.123添加的HTTP标头发出请求。

此代码会降低您的安全性,使我可以假装我是localhost(127.0.0.1)或“Santa Clause”,因为这些值未经过验证,无法包含实际的IP地址。

另请注意,例如,X-Forwarded-For HTTP标头可以包含多个IP地址,而不仅仅是一个(以逗号分隔)。

$_SERVER['REMOTE_ADDR']是您唯一的选择。