2017-08-29 113 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不客氣。 –