我有一個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