PHPはIP白黒リストのフィルタリングを実現する


需要は1つの运維の同僚から来て、1つの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が少なくとも1つのルールを満たしている場合に操作を継続するホワイトリスト
    

     $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白黒リストフィルタリングが完了した.このブログは主に、テクノロジーサポート、メンテナンスなど、主なビジネスが開発されていない人に提供されています.簡単すぎて、もともと書きたくなかったので、その同僚は私の助けに感謝して、私にこれを言って、彼はネット上で長い間探して、適切な解決策を見つけていないので、私はこれが本当に必要な人がいるかどうか言いたいです.