PHP는 IP 화이트리스트에 대한 액세스를 어떻게 제한하나요?
1. 코드 업로드
config.php
//ip白名单配置 'ipWlist'=>[ 'ifFilter'=>true, //是否开启白名单功能 'wlist'=>[ '10.0.0.19', ], 'warea1'=>'10.8.0.0/16', //白名单网段1 'warea2'=>'10.12.0.0/16', //白名单网段1 ],
commonfunc .php
private function checkIp(){ $user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"]; $user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"]; $ipC=config('appconf.ipWlist'); if(!$ipC['ifFilter']){ return true; } if(in_array($user_IP, $ipC['wlist'])){ return true; } if( ! $this->ip_in_network($user_IP, $ipC['warea1'])){ if( ! $this->ip_in_network($user_IP, $ipC['warea2'])){ return false; } } return true; } private function ip_in_network($ip, $network) { $ip = (double) (sprintf("%u", ip2long($ip))); $s = explode('/', $network); $network_start = (double) (sprintf("%u", ip2long($s[0]))); $network_len = pow(2, 32 - $s[1]); $network_end = $network_start + $network_len - 1; if ($ip >= $network_start && $ip <= $network_end) { return true; } return false; }
2. 설명
2.1 IP를 얻는 방법
● $_SERVER["HTTP_VIA"] 프록시 서버가 있으면 프록시 서버 IP를 나타냅니다.
● $_SERVER ["HTTP_X_FORWARDED_FOR" ] 프록시 서버를 통해 클라이언트의 실제 IP 주소를 얻습니다.
● $_SERVER["REMOTE_ADDR"] 현재 페이지를 탐색 중인 사용자의 IP 주소
일반적으로 개발자가 내부 서버 아키텍처를 잘 이해하고 있다면 간단히 REMOTE_ADDR을 사용하면 됩니다. REMOTE_ADDR은 위조가 불가능하고 더 안전하지만 다른 두 필드는 그다지 신뢰할 수 없기 때문입니다.
2.2 일부 아동용 신발은 배열 구성을 사용하지 않고 정의합니다
json_encode, 직렬화, eval( ) 및 다른 방법으로 해결하려면 아래와 같이
define("IPFILTER",1); define('IPWLISTJSON',json_encode(['127.0.0.1',])); // 业务中 $wlist = json_decode(IPWLISTJSON,1); define('IPWLIST',"return ['127.0.0.1',];"); // 业务中 $wlist=eval(IPWLIST) define('IPWLIST',serialize(['127.0.0.1',])); // 业务中 $wlist=unserialize(IPWLIST);
문자열 특수 구분 기호 등의 분해 형식을 사용할 수도 있습니다. 여기서는 예제를 하나씩 제공하지 않겠습니다.
관련 PHP 지식을 더 보려면 php 튜토리얼을 방문하세요!
위 내용은 PHP에서 IP 화이트리스트에 대한 액세스를 제한하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!