ホームページ  >  記事  >  バックエンド開発  >  PHP は IP ブラック/ホワイト リスト フィルタリングを実装します

PHP は IP ブラック/ホワイト リスト フィルタリングを実装します

巴扎黑
巴扎黑オリジナル
2016-11-23 10:56:001618ブラウズ

運用保守の同僚からのリクエストで、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 がルールに準拠しているかどうかを判断し、対応する手順を実行します。 P p リスト、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');
E
ブラックリスト、IP がすべてのルールを満たさない場合、操作の実行を続行します。このブログは主に技術サポートや運用保守など、開発以外を本業としている人向けのブログです。あまりにも簡単すぎたので、最初は書きたくなかったのですが、後で同僚が私の協力に感謝し、インターネットでこれを長い間探していたが、適切な解決策が見つからなかったと言いました。 . もしかしたら本当に必要な人がいるかもしれないと思いました。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。