Quand il s'agit de récupérer l'adresse IP d'un utilisateur en PHP, il existe de nombreuses options à choisir. Cependant, la méthode la plus précise dépend d'un certain nombre de facteurs.
Un facteur à considérer est de savoir si l'utilisateur se trouve derrière un proxy. Si l'utilisateur se trouve derrière un proxy, son adresse IP peut être masquée ou masquée. Dans ce cas, vous devrez utiliser une méthode capable de percer le proxy pour obtenir la véritable adresse IP de l'utilisateur.
Un autre facteur à considérer est de savoir si vous souhaitez utiliser une approche de liste blanche ou de liste noire. Une approche de liste blanche signifie que vous autorisez uniquement le trafic provenant de certaines adresses IP. Une approche de liste noire signifie que vous bloquez le trafic provenant de certaines adresses IP. La méthode que vous choisirez dépendra de vos besoins spécifiques et de vos exigences de sécurité.
Le code suivant est un consensus général sur la façon de récupérer le plus précisément possible l'adresse IP réelle d'un utilisateur à l'aide des variables $_SERVER :
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; } } } } }
Ce code vérifie un certain nombre de variables $_SERVER et essaie de renvoyer la première adresse IP valide. Ce code fournit une estimation plus précise de l'adresse IP réelle d'un utilisateur, mais il n'est toujours pas parfait.
Mots d'avertissement :
Gardez à l'esprit que $_SERVER[ 'REMOTE_ADDR'] représente toujours la source d'adresse IP la plus fiable, malgré son potentiel d'inexactitudes. Le but du code ci-dessus est de tenter de déterminer l'adresse IP d'un client assis derrière un proxy. À des fins générales, il est conseillé de combiner cette méthode avec l'adresse IP renvoyée directement par $_SERVER['REMOTE_ADDR'] et de stocker les deux.
Pour l'écrasante majorité des utilisateurs, le code ci-dessus fournira des résultats précis. Cependant, il n'est peut-être pas infaillible contre les utilisateurs malveillants qui pourraient tenter d'abuser de votre système en injectant leurs propres en-têtes de requête. Pour les applications critiques reposant sur des adresses IP, respectez $_SERVER['REMOTE_ADDR'] et évitez de vous adresser aux utilisateurs derrière des proxys.
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!