Les fonctions pratiques de PHP pour implémenter des listes noires et blanches

墨辰丷
Libérer: 2023-03-31 20:14:01
original
1783 Les gens l'ont consulté

Cet article partage avec vous deux fonctions pratiques en PHP pour implémenter des listes noires et blanches, à savoir la fonction de détection d'IP de sécurité et la fonction d'acquisition d'IP client. L'explication est très claire dans les commentaires, je n'entrerai donc pas trop dans les détails. beaucoup de bêtises ici.

Il s'agit d'une fonction PHP qui détecte si une IP est illégale. Elle convient au développement de fonctions de liste blanche et de liste noire. Les principaux scénarios s'appliquent aux : restrictions de source API, restrictions d'accès, etc.

Le code est le suivant :

/**
 * 安全IP检测,支持IP段检测
 * @param string $ip 要检测的IP
 * @param string|array $ips  白名单IP或者黑名单IP
 * @return boolean true 在白名单或者黑名单中,否则不在
 */
function is_safe_ip($ip="",$ips=""){ 
    if(!$ip) $ip = get_client_ip();  //获取客户端IP
    if($ips){
        if(is_string($ips)){ //ip用"," 例如白名单IP:192.168.1.13,123.23.23.44,193.134.*.*
            $ips = explode(",", $ips);
        }
    }else{ //读取后台配置 白名单IP
        $obj = new Setting();
        $ips = explode(",", $obj->getConfig("whiteip"));  
    }
    if(in_array($ip, $ips)){
        return true;
    }
    $ipregexp = implode('|', str_replace( array('*','.'), array('\d+','\.') ,$ips));  
    $rs = preg_match("/^(".$ipregexp.")$/", $ip);  
    if($rs) return true;
    return ;
}
Copier après la connexion

Obtenir l'adresse IP. Nous citons ici la fonction intégrée de thinkphp

Le code est le suivant :

//应网友要求,贴出 get_client_ip() 函数
/**
 * 获取客户端IP地址
 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
 * @param boolean $adv 是否进行高级模式获取(有可能被伪装) 
 * @return mixed
 */
function get_client_ip($type = 0,$adv=false) {
    $type       =  $type ? 1 : 0;
    static $ip  =   NULL;
    if ($ip !== NULL) return $ip[$type];
    if($adv){
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $arr    =   explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
            $pos    =   array_search('unknown',$arr);
            if(false !== $pos) unset($arr[$pos]);
            $ip     =   trim($arr[0]);
        }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
            $ip     =   $_SERVER['HTTP_CLIENT_IP'];
        }elseif (isset($_SERVER['REMOTE_ADDR'])) {
            $ip     =   $_SERVER['REMOTE_ADDR'];
        }
    }elseif (isset($_SERVER['REMOTE_ADDR'])) {
        $ip     =   $_SERVER['REMOTE_ADDR'];
    }
    // IP地址合法验证
    $long = sprintf("%u",ip2long($ip));
    $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);
    return $ip[$type];
}
Copier après la connexion

Résumé : Ce qui précède est le contenu complet de l'article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

Connaissance de base des flux PHP

Introduction et rôle du buffering de sortie PHP

Méthode php pour implémenter la communication UDP basée sur socket

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:
source:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!