Discuz! IP 获取和验证代码以及$onlineipmatches

本文探讨了Discuz!7.2版本中common.inc.php文件如何通过多种方式获取客户端IP地址,并分析了使用正则表达式处理IP地址的过程及潜在的安全风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  刚才看了下Discuz! 7.2的common.inc.php文件内容,想找下突破IP验证版块的方法。代码里获取IP的代码

 

如下:

 

if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
	$onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
	$onlineip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
	$onlineip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
	$onlineip = $_SERVER['REMOTE_ADDR'];
}

preg_match("/[\d\.]{7,15}/", $onlineip, $onlineipmatches);
$onlineip = $onlineipmatches[0] ? $onlineipmatches[0] : 'unknown';
unset($onlineipmatches);

 

看到这个$onlineipmatches 变量。用正则表达式从变量$onlineip中取出符合规则的内容赋予给$onlineipmatches,

 

最后将$onlineipmatches数组的第一个元素赋予给$onlineip(如果存在合规则的话,否则设为unknown)。

 

我有个问题,$onlineipmatches 没有初始化,会不会存在变量覆盖的安全问题呢?

 

也就是在url上赋值给$onlineipmatches,引入恶意代码。之前有过‘HTTP_X_FORWARDED_FOR’ 提交恶意代码,导致SQL注入问题,那这个会不会呢?

 

由于本人对PHP一窍不通,So~~~~(只是想想)

 

参见:http://code.google.com/p/pasc2at/wiki/SimplifiedChinese#%E5%8F%98%E9%87%8F%E8%A6%86%E7%9B%96

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值