1

两部分问题。

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

其次,我获得的 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;
}
4

1 回答 1

2

您的代码允许任何调用者指定他们想要的任何 IP 地址(也称为 IP 欺骗)。

攻击者所要做的就是发出带有附加 HTTP 标头的请求,例如X-Forwarded-For: 123.123.123.123.

此代码会降低您的安全性,以至于我可以假装我是 localhost (127.0.0.1) 或“圣诞老人”,因为这些值未经验证以包含实际的 IP 地址。

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

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

于 2012-06-08T19:12:02.193 回答