您的位置:首页 > 编程语言 > PHP开发

PHP获取真实的客户IP

2007-08-29 09:46 246 查看
如何获取真实的客户IP
服务器的环境是APACHE+PHP,在配置Squid后会产生一个问题:
原先使用PHP预定义变量$_SERVER['REMOTE_ADDR']获取客户端的IP地址,现在这个变量的值是Squid代理的IP地址,比如假设Squid和Apache装在同一服务器上的话,现在$_SERVER['REMOTE_ADDR']是127.0.0.1。
为了取得真实的客户端IP地址,可以使用$_SERVER['HTTP_X_FORWARDED_FOR']来透过代理,这个变量在PHP的官方手册里的保留字列表|预定义变量|$_SERVER部分里没有提到,但在相应评论里可以找到。
'HTTP_X_FORWARDED_FOR'是HTTP协议头中的一部分,也就是说客户端可以伪造,使用时需要进行相应检测防止被利用,例如网站有封IP的功能,恶意用户可以伪造IP,使网站误封正常用户的IP。

后注:最近看到了PHP手册用户注释中更好更完善的解决办法:

if ($_SERVER["HTTP_X_FORWARDED_FOR"]) {
if ($_SERVER["HTTP_CLIENT_IP"]) {
$proxy = $_SERVER["HTTP_CLIENT_IP"];
} else {
$proxy = $_SERVER["REMOTE_ADDR"];
}
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else {
if ($_SERVER["HTTP_CLIENT_IP"]) {
$ip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$ip = $_SERVER["REMOTE_ADDR"];
}
}
echo "Your IP $ip";
if (isset($proxy)) {
echo "Your proxy IP is $proxy";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: