2012-06-08 211 views
1

两部分问题。查找真实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; 
} 
+0

因为你在代理的背后?因为你的网关正在使用NAT? –

+0

我们可能需要更多信息来回答第一个问题。例如,IP地址所在字段的HTML,填充方式以及验证方式。 – andrewsi

+0

我的朋友,您的机器在本地网络中的IP不等于您路由器的IP(当您浏览Internet时使用)。 –

回答

2

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

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

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

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

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

+0

谢谢。我注意到,我的IP是作为Quest分配的,而不是我在ifconfig中看到的。这是由于我的本地IP不是路由器IP。它可以阻止htacccess中的用户,但是如果他们改变了路由器,它不会阻止他们。谢谢您的帮助。越安全越好。 –

+0

关于'$ _SERVER ['REMOTE_ADDR']'的有用Q/A:http://stackoverflow.com/q/4773969/186636 –