在PHP中拒绝具有无效IP地址的访问者
问题描述:
我想拒绝具有无效IP地址的访问者访问我的门户。这是一个好的解决方案吗?在PHP中拒绝具有无效IP地址的访问者
$ipaddress = '';
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 = '';
if (filter_var ($ipaddress, FILTER_VALIDATE_IP) == false)
{
$ipaddress = '';
}
if ($ipaddress == '')
{
die();
}
谢谢!
答
我想你只允许访问者使用真实IP地址而不是恶搞?
下面的代码将允许在您的网站上欺骗IP地址,但是,我修复了它,并提供了一个非常简短的功能 ,它将执行您正在寻找的任务。
<?php
$ipaddress = '';
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 = '';
if (filter_var ($ipaddress, FILTER_VALIDATE_IP) == false)
{
$ipaddress = '';
die();
}
/** You don't want this here;
kill the script once IP Validation return false.
if ($ipaddress == '')
{
die();
}
*/
##使用下面的这个函数;
function checkIPAddress()
{
// Get IP Address using $_SERVER['REMOTE_ADDR'];
$ipaddress = ($_SERVER('REMOTE_ADDR')) ? $_SERVER('REMOTE_ADDR') : '';
if (filter_var ($ipaddress, FILTER_VALIDATE_IP) == false)
{
$ipaddress = '';
die();
}
}
允许
HTTP_X_FORWARDED
是一个坏习惯。当你在做代理服务器,负载平衡等时使用它。
+0
你是对的,谢谢! – DevinPHP
+0
@DevinPHP不客气。 –
如果他们有一个无效的IP地址,他们可能不会得到回应。此外,如果我花时间欺骗IP,我会使用一个可以验证的IP。 – chris85
某人使用'无效IP'地址将无法使用互联网,您需要一个有效的IP地址。也许你应该更确切地定义'无效'的含义? –
这篇文章似乎回答了你的问题。 https://stackoverflow.com/questions/7939905/how-to-detect-the-actual-ip-address-of-visitors?rq=1 –