将假/本地IP地址设置为PHP$\u服务器变量
我在我的PHP站点上使用以下函数来获取访问者的IP将假/本地IP地址设置为PHP$\u服务器变量,php,Php,我在我的PHP站点上使用以下函数来获取访问者的IP function getClientIP(){ if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)){ return $_SERVER["HTTP_X_FORWARDED_FOR"]; }else if (array_key_exists('REMOTE_ADDR', $_SERVER)) { return $_SERVER["R
function getClientIP(){
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)){
return $_SERVER["HTTP_X_FORWARDED_FOR"];
}else if (array_key_exists('REMOTE_ADDR', $_SERVER)) {
return $_SERVER["REMOTE_ADDR"];
}else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) {
return $_SERVER["HTTP_CLIENT_IP"];
}
return '';}
由于我之前没有对IP地址使用任何筛选器或验证,
几天前,在我们的IP地址列中,我收到了一些随机字符串(例如,$IP_array
),而不是一个有效的IP地址。
我认为这个请求是用PHP脚本发送的,
我尝试了几种方法来欺骗我自己的站点的IP,但每次都是我的原始IP或IP分配的VPN
如何获得字符串而不是IP。您可以尝试以下方法:
<?PHP
function getUserIP()
{
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
if(filter_var($client, FILTER_VALIDATE_IP))
{
$ip = $client;
}
elseif(filter_var($forward, FILTER_VALIDATE_IP))
{
$ip = $forward;
}
else
{
$ip = $remote;
}
return $ip;
}
$user_ip = getUserIP();
echo $user_ip; // Output IP address [Ex: 192.168.1.150]
?>
你能提供更多这些“随机字符串”的例子吗另一个是{$rand_IP_list}看样子你可以这么做:显然他们没有正确设置变量curl--header“X-Forwarded-For:$fake_-IP”http://www.example.com“
谢谢@chris85,我知道了,谢谢史密斯的澄清,使用HTTP_X_FORWARDED_FOR对我来说是强制性的,以防止某些应用程序用户出现随机IP问题,例如:opera mini、ucweb、puffin。所有这些浏览器都在使用压缩技术,每次使用应用程序时都将随机IP分配给所有用户,为了获得他们的真实IP,我在顶部使用HTTP_FORWARDED_。有没有其他方法可以防止这种欺骗?或者我们必须为那些浏览器之外的所有人使用$\u SERVER[“REMOTE\u ADDR”],如果有人也更改了UA,我们将再次遇到问题