PHP兑现IP黑白名单过滤

WBOY
Release: 2016-06-13 11:03:13
Original
1247 people have browsed it

PHP实现IP黑白名单过滤
    需求来自一个运维的同事,对一个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;   }    
Copy after login

实现了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');     
Copy after login

黑名单,当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');        }     }     
Copy after login

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

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template