PHP实现IP黑白名单过滤

巴扎黑
发布: 2016-11-23 10:56:00
原创
1904人浏览过

  需求来自一个运维的同事,对一个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黑白名单过滤就完成了。这篇博客主要是给那些主业务不是开发的人员,如:技术支持、运维等。由于太简单,原本不想写,后来那个同事感谢我帮忙,对我说这个他在网上找了很久,都没有找到合适的解决方案,我就想说不定这个还真有人需要呢。  

 

立即学习PHP免费学习笔记(深入)”;

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号