您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

PHP实现IP黑白名单过滤

2024/5/2 7:46:55发布17次查看
需求来自一个运维的同事,对一个php文件执行进行ip过滤,不方便直接配置服务器,于是需要直接在php文件开头进行ip的过滤。 
    ip过滤规则,可以有如下形式: 
    1.完整的ip地址 如:192.168.0.1  
    2.某一段ip 如:192.168.0.* 。 
    运维可以自定义ip黑白名单,由多个ip过滤规则组成,保存在数组中。通过编写代码,实现ip黑白名单功能。一个比较简单的需求。 
    首先实现一个函数,功能是判断ip是否符合某个ip过滤规则:
function ip_test($ip,$iprule){ $ipruleregexp=str_replace('.*','ph',$iprule); $ipruleregexp=preg_quote($ipruleregexp,'/'); $ipruleregexp=str_replace('ph','\.[0-9]{1,3}',$ipruleregexp); if(preg_match('/^'.$ipruleregexp.'$/',$ip)) return true; else return false; }
实现了ip_test这个核心函数后,下面的过程就简单多了,无非就是简单的遍历名单中的每条规则,判断当前连接的ip是否符合规则,并进行对应的步骤。
白名单,当ip至少满足一条规则时继续执行操作
$curr_ip=$_server['remote_addr']; $white_list=array(...); //白名单规则 $test_success=false; foreach($white_list as $iprule){ if(ip_test($curr_ip,$iprule)){ $test_success=true; break; } } if(!$test_success) exit('ip not in white list');
黑名单,当ip不满足所有规则时继续执行操作
$curr_ip=$_server['remote_addr']; $black_list=array(...); //黑名单规则 foreach($black_list as $iprule){ if(ip_test($curr_ip,$iprule)){ exit('ip in black list'); } }
就这样,一个简单的php实现的ip黑白名单过滤就完成了。这篇博客主要是给那些主业务不是开发的人员,如:技术支持、运维等。由于太简单,原本不想写,后来那个同事感谢我帮忙,对我说这个他在网上找了很久,都没有找到合适的解决方案,我就想说不定这个还真有人需要呢。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product