两部分问题。
首先,当我尝试在隐藏的输入字段中回显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 :(得分: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']
是您唯一的选择。