PHP中的IP地址

时间:2016-08-01 14:29:03

标签: php ip

我有一个用PHP编写的竞赛,基于投票。从一个IP,一个人可以一次投票给某人。我有一个投票的所有IP地址的日志,但我看到一些奇怪的东西。一些IP地址看起来像=“ip_address:port”,而其他IP地址只是ip_address,我看到一个ip地址,格式为for =“...”似乎有多次,只是有不同的端口。有人可以向我解释一下吗?用户如何做到这一点,我应该禁止他们竞争吗?

我使用此功能获取用户IP地址:

function get_client_ip_env() {
    if (getenv('HTTP_CLIENT_IP'))
        $ipaddress = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ipaddress = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
        $ipaddress = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ipaddress = getenv('REMOTE_ADDR');
    else
        $ipaddress = 'UNKNOWN';

    return $ipaddress;
}

另外,如果有人知道PHP中所有预定义变量的一些好参考和手册,请与我分享。

2 个答案:

答案 0 :(得分:0)

IP地址HTTP标头很容易被欺骗,许多用户(主要是移动用户,例如wifi连接)在非常短的IP地址上拥有租用时间,从而使他们能够再次投票。

那说你可以组合选项,例如检查IP地址设置一个cookie,使其更难绕过。

如果您使用IP地址设置端口,则它将与您的数据库记录/ IP地址列表不匹配。你应该禁止他们吗?我无法回答这个问题。

您的大多数检查方法都基于请求所说的IP地址,例如HTTP标头,这些标题很容易被欺骗。不要相信他们或接受你的民意调查不会得到准确的结果。

如果你真的想要一个允许每人一票的公平投票系统,你需要使用其他东西,然后使用IP地址来识别用户。

答案 1 :(得分:0)

试试这个,它可能对你有所帮助

 <?php
 //for example
     $ip = "216.58.196.68:8989";
     $ip = strstr("$ip",':',true); //get text before :   
     echo $ip;
//it echo only 216.58.196.68
?>