我有一个PHP脚本竞赛,基于投票。从一个知识产权来看,一个人可以一次投票给某个人。我有投票的所有IP地址的日志,但我看到一些奇怪的东西。有些IP地址看起来像=“ip_address:port”,而另一些只是ip_address,我看到一个ip地址格式化为=“...”似乎有多次,只是有不同的端口。有人可以向我解释吗?用户如何做到这一点,我是否应该禁止他们参与竞争?在PHP中的IP地址
我用这个函数来获取用户的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所有预定义变量,请与我分享。
只有*** ***一个远程IP的可靠来源:'REMOTE_ADDR'。其他的一切都由HTTP标头设置,任何人都可以根据自己的喜好设置,从而完全规避您的“保护”。你通过查看所有这些随机的HTTP标题来拍摄自己的脚。您看到的“怪异值”可能来自其中一个标题。 – deceze
如果您有反向代理或负载均衡器,请仅检查代理或负载均衡器设置的特定标头,并且只有信任标头特别来自代理或负载均衡器。 –
PHP中的所有超全局http://php.net/manual/en/language.variables.superglobals.php – Dave