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

Explication détaillée de la façon de restreindre l'accès à la liste blanche IP en PHP

藏色散人
藏色散人avant
2020-01-22 11:02:093387parcourir

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éfinissent

qui peut être résolu par json_encode, sérialisation, eval(), etc., comme suit

define("IPFILTER",1);  
define(&#39;IPWLISTJSON&#39;,json_encode([&#39;127.0.0.1&#39;,]));
// 业务中
$wlist = json_decode(IPWLISTJSON,1);
define(&#39;IPWLIST&#39;,"return [&#39;127.0.0.1&#39;,];");
// 业务中
$wlist=eval(IPWLIST)
define(&#39;IPWLIST&#39;,serialize([&#39;127.0.0.1&#39;,]));
// 业务中
$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 php

 !

Ce 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer