2017-08-29 112 views
0

我想拒绝具有无效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(); 
    } 

谢谢!

+2

如果他们有一个无效的IP地址,他们可能不会得到回应。此外,如果我花时间欺骗IP,我会使用一个可以验证的IP。 – chris85

+1

某人使用'无效IP'地址将无法使用互联网,您需要一个有效的IP地址。也许你应该更确切地定义'无效'的含义? –

+0

这篇文章似乎回答了你的问题。 https://stackoverflow.com/questions/7939905/how-to-detect-the-actual-ip-address-of-visitors?rq=1 –

回答

0

我想你只允许访问者使用真实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不客气。 –