運用保守の同僚から、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} ',$ iruleregexp);
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 がホワイト リストにありません');
ブラックリスト、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');
}
}
このようにして、IP ブラックリストとホワイトリストのフィルタリングの単純な PHP 実装が完了します。このブログは主に技術サポートや運用保守など、開発以外を本業としている人向けのブログです。あまりにも簡単すぎたので、最初は書きたくなかったのですが、後で同僚が私の協力に感謝し、インターネットでこれを長い間探していたが、適切な解決策が見つからなかったと言いました。 . もしかしたら本当に必要な人がいるかもしれないと思いました。
この記事へのリンク http://www.cxybl.com/html/wlbc/Php/20130326/37394.html