我有一个用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中所有预定义变量的一些好参考和手册,请与我分享。
答案 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
?>