查找真实IP地址
两部分问题。查找真实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;
}
您的代码允许任何调用者指定他们想要的任何IP地址(又名IP欺骗)。
所有攻击者必须做的是使用添加的HTTP标头(如X-Forwarded-For: 123.123.123.123
)发出请求。
此代码降低您的安全性,我可以假装我是本地主机(127.0.0.1)或“圣诞老人条款”,因为这些值未验证包含实际的IP地址。
另请注意,例如,X-Forwarded-For HTTP标头可以包含多个IP地址,而不仅仅是一个(以逗号分隔)。
$_SERVER['REMOTE_ADDR']
是您唯一的选择。
谢谢。我注意到,我的IP是作为Quest分配的,而不是我在ifconfig中看到的。这是由于我的本地IP不是路由器IP。它可以阻止htacccess中的用户,但是如果他们改变了路由器,它不会阻止他们。谢谢您的帮助。越安全越好。 –
关于'$ _SERVER ['REMOTE_ADDR']'的有用Q/A:http://*.com/q/4773969/186636 –
因为你在代理的背后?因为你的网关正在使用NAT? –
我们可能需要更多信息来回答第一个问题。例如,IP地址所在字段的HTML,填充方式以及验证方式。 – andrewsi
我的朋友,您的机器在本地网络中的IP不等于您路由器的IP(当您浏览Internet时使用)。 –