Maison > Article > développement back-end > Explication détaillée de la façon de restreindre l'accès à la liste blanche IP en PHP
Comment PHP restreint-il l'accès à la liste blanche des IP ?
1. Téléchargez le code
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. Description
2.1 Comment obtenir l'IP
● $_SERVER["HTTP_VIA" ] Lorsqu'il y a un serveur proxy, il indique l'IP du serveur proxy ;
● $_SERVER["HTTP_X_FORWARDED_FOR"] obtient la véritable adresse IP du client via le serveur proxy ; "REMOTE_ADDR"] L'adresse IP de l'utilisateur qui parcourt la page actuelle
De manière générale, les développeurs ont une bonne compréhension de l'architecture interne du serveur et peuvent simplement utiliser REMOTE_ADDR, car REMOTE_ADDR ne peut pas être falsifié et est plus sécurisé . Les deux autres champs ne sont pas si fiables.
2.2 Certaines chaussures pour enfants n'utilisent pas de configuration de tableau mais définissentqui peut être résolu par json_encode, sérialisation, eval(), etc., comme suit
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);
Vous pouvez également utiliser la forme éclatée du délimiteur spécial de chaîne, etc. Je ne donnerai pas d'exemples un par un ici.
Pour plus de connaissances sur php, veuillez visiter le
tutoriel phpCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!