Maison > développement back-end > tutoriel php > 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

藏色散人
Libérer: 2023-04-08 09:32:02
avant
3504 Les gens l'ont consulté

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
        ],
Copier après la connexion

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;
    }
Copier après la connexion

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);
Copier après la connexion
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!

Étiquettes associées:
php
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal