帝国 cms 反馈信息获取 IP 不完整

问题:

使用帝国 cms 的反馈信息模块时,发现在用户提交过来的表单中,一部分 IP 获取的不完整。比如:
在这里插入图片描述
在这里插入图片描述

查看代码:

发现在 /e/class/connect.php 中,获取 IP 的代码是这样的:

//取得IP
function egetip(){
	global $ecms_config;
	if(getenv('HTTP_CLIENT_IP')&&strcasecmp(getenv('HTTP_CLIENT_IP'),'unknown')) 
	{
		$ip=getenv('HTTP_CLIENT_IP');
	} 
	elseif(getenv('HTTP_X_FORWARDED_FOR')&&strcasecmp(getenv('HTTP_X_FORWARDED_FOR'),'unknown'))
	{
		$ip=getenv('HTTP_X_FORWARDED_FOR');
	}
	elseif(getenv('REMOTE_ADDR')&&strcasecmp(getenv('REMOTE_ADDR'),'unknown'))
	{
		$ip=getenv('REMOTE_ADDR');
	}
	elseif(isset($_SERVER['REMOTE_ADDR'])&&$_SERVER['REMOTE_ADDR']&&strcasecmp($_SERVER['REMOTE_ADDR'],'unknown'))
	{
		$ip=$_SERVER['REMOTE_ADDR'];
	}
	if($ecms_config['sets']['getiptype']>0)
	{
		$ip=egetipadd();
	}
	$ip=RepPostVar(preg_replace("/^([\d\.]+).*/","\\1",$ip));
	return $ip;
}

代码中发现了有正则表达式,所以怀疑可能是 IPV6 被截取导致的 IP 显示不全。因此可注释掉。

分析

  1. 正则表达式截断了用户的 IPV6 地址,导致显示不完整;
  2. 用户采取措施阻止获取 IP 地址,导致获得的值可能是部分或截断的 IP 地址,例如:“2”或“10.0”。可能是由于用户网络或软件的配置方式所致,或者由于 IP 地址被代理或负载平衡器等中介机构转发或屏蔽的方式所致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值