【问题标题】:Setting Fake/local IP address To PHP $_SERVER variable将假/本地 IP 地址设置为 PHP $_SERVER 变量
【发布时间】:2018-04-26 05:43:43
【问题描述】:

我在我的 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。

【问题讨论】:

  • 你能提供更多关于这些“随机字符串”的例子
  • 另一个是 {$rand_IP_list}
  • 看起来你可以这样做:显然他们未能正确设置变量curl --header "X-Forwarded-For: $fake_ip" "http://www.example.com"
  • 感谢@chris85,我明白了,感谢 smith 的澄清,我必须使用 HTTP_X_FORWARDED_FOR 来防止某些应用程序用户出现随机 IP 问题,例如:opera mini、ucweb、puffin 所有这些浏览器都在使用它们的压缩技术并在他们每次使用应用程序时为其所有用户分配随机 IP 并获得他们的真实 IP 我在顶部使用 HTTP_X_FORWARDED_FOR。有没有其他方法可以防止这种欺骗。 ?或者我们必须再次为那些浏览器旁边的每个人使用 $_SERVER["REMOTE_ADDR"] 如果有人也更改他们的 UA,我们会遇到问题

标签: php


【解决方案1】:

你可以试试这个:

<?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]


?>

【讨论】:

    猜你喜欢
    • 2012-09-23
    • 1970-01-01
    • 2015-06-19
    • 2011-05-09
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 2023-01-28
    • 2016-08-29
    相关资源
    最近更新 更多