PHP 파일에 대해 IP 필터링을 수행하고 싶다는 운영 및 유지 관리 동료로부터 요구 사항이 나왔습니다. 서버를 직접 구성하는 것이 불편하여 php 파일 시작 부분에 IP를 직접 필터링해야 했습니다.
IP 필터링 규칙은 다음 형식을 가질 수 있습니다.
1. 192.168.0.1과 같은 완전한 IP 주소
2. 192.168.0.*과 같은 특정 IP 세그먼트.
운영 및 유지 관리는 여러 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를 구현한 후 다음 프로세스는 훨씬 간단합니다. a simple traversal 목록의 각 규칙에 대해 현재 연결된 IP가 규칙을 준수하는지 확인하고 해당 단계를 수행합니다.
화이트리스트, IP가 하나 이상의 규칙을 충족하면 계속 작업을 수행합니다
이로써 PHP에서 구현되는 간단한 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');