Maison > développement back-end > tutoriel php > Comment puis-je obtenir avec précision l'adresse IP d'un utilisateur en PHP ?

Comment puis-je obtenir avec précision l'adresse IP d'un utilisateur en PHP ?

Patricia Arquette
Libérer: 2024-12-24 07:25:13
original
591 Les gens l'ont consulté

How Can I Accurately Get a User's IP Address in PHP?

Comment récupérer avec précision l'adresse IP d'un utilisateur en PHP

Récupérer l'adresse IP d'un utilisateur en PHP peut être une tâche difficile en raison de l'utilisation de proxys et d'autres facteurs qui peuvent obscurcir la véritable adresse IP. Bien qu'il existe plusieurs méthodes disponibles, chacune avec ses propres limites, comprendre l'approche la plus efficace peut garantir une récupération précise de l'adresse IP.

Une méthode courante consiste à utiliser la variable globale $_SERVER. Il propose divers en-têtes contenant potentiellement des informations IP. Parmi eux, REMOTE_ADDR contient l'adresse IP du dernier client connu ; cependant, cette méthode n'est pas considérée comme fiable car elle peut être facilement usurpée.

Pour résoudre ce problème, les développeurs PHP ont développé une approche plus complète qui exploite plusieurs en-têtes $_SERVER. Cette approche consiste à vérifier les adresses IP Internet/FAI partagées via HTTP_CLIENT_IP. De plus, il examine les adresses IP passant par des proxys via des en-têtes tels que HTTP_X_FORWARDED_FOR, HTTP_X_FORWARDED, HTTP_X_CLUSTER_CLIENT_IP, HTTP_FORWARDED_FOR et HTTP_FORWARDED.

L'hypothèse est que l'un de ces en-têtes fournira une adresse IP plus précise. Pour garantir la validité, la fonction validate_ip est utilisée pour filtrer les réseaux privés et les adresses IP invalides.

Voici une version simplifiée du code fourni dans la question :

function get_ip_address(){
    foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key){
        if (array_key_exists($key, $_SERVER) === true){
            foreach (explode(',', $_SERVER[$key]) as $ip){
                $ip = trim($ip); // just to be safe

                if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){
                    return $ip;
                }
            }
        }
    }
}
Copier après la connexion

Bien que cette méthode améliore considérablement la précision, elle reste sensible aux utilisateurs malveillants qui peuvent injecter leurs propres en-têtes de requête. Pour les applications critiques, il est recommandé de s'appuyer uniquement sur REMOTE_ADDR.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal