首页 > 解决方案 > 将假/本地 IP 地址设置为 PHP $_SERVER 变量

问题描述

我在我的 PHP 网站上使用以下函数来获取访问者 IP

function getClientIP(){       
 if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)){
        return  $_SERVER["HTTP_X_FORWARDED_FOR"];  
 }else if (array_key_exists('REMOTE_ADDR', $_SERVER)) { 
        return $_SERVER["REMOTE_ADDR"]; 
 }else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) {
        return $_SERVER["HTTP_CLIENT_IP"]; 
 } 

 return '';}

由于我之前没有对 IP 地址使用任何过滤器或验证,几天前在我们的 IP 地址列中,我收到了一些随机字符串(例如$IP_array)而不是有效的 IP 地址。而且我认为该请求是使用 PHP 脚本发送的,我尝试了几种方法来欺骗我自己的网站的 IP,但是每次获得我的原始 IP 或 IP 分配的 VPN 时,如何获得一些字符串而不是 IP。

标签: php

解决方案


你可以试试这个:

<?PHP

function getUserIP()
{
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];

    if(filter_var($client, FILTER_VALIDATE_IP))
    {
        $ip = $client;
    }
    elseif(filter_var($forward, FILTER_VALIDATE_IP))
    {
        $ip = $forward;
    }
    else
    {
        $ip = $remote;
    }

    return $ip;
}


$user_ip = getUserIP();

echo $user_ip; // Output IP address [Ex: 192.168.1.150]


?>

推荐阅读