Block specific IP block from my website in PHP

前端 未结 8 1505
小蘑菇
小蘑菇 2020-12-05 12:02

I\'d like, for example, block every IP from base 89.95 (89.95..). I don\'t have .htaccess files on my server, so I\'ll have to do it with PHP.

相关标签:
8条回答
  • 2020-12-05 12:13

    Try strpos()

    if(strpos($_SERVER['REMOTE_ADDR'], "89.95") === 0)
    {
        die();
    }
    

    If you notice, the === operator makes sure that the 89.95 is at the begining of the IP address. This means that you can sepcify as much of the IP address as you want, and it will block no matter what numbers come after it.

    For instance, all of these will be blocked:

    89.95 -> 89.95.12.34, 89.95.1234.1, 89.95.1.1
    89.95.6 -> 89.95.65.34, 89.95.61.1, 89.95.6987

    (some of those aren't valid IP addresses though)

    0 讨论(0)
  • 2020-12-05 12:16
    $user_ip = $_SERVER['REMOTE_ADDR']; // get user ip
    
    $denyIPs = array("111.111.111", "222.222.222", "333.333.333");
    if (in_array ($user_ip, $denyIPs)) {
       // blocked ip
    }
    else {
       // not blocked
    }
    
    0 讨论(0)
  • 2020-12-05 12:19

    This has always worked very well for me: This checks for the proper server variables and compares it against a list of known IPs.. and yes, PHP does understand wildcards, so using * within the IP with assist in blocking ranges of IPs.

    // The blacklisted ips.
    $denied_ips = array(
    '1.2.3.4',
    '2.3.*',
    );
    
    // The function to get the visitor's IP.
    function getUserIP(){
        //check ip from share internet
        if (!empty($_SERVER['HTTP_CLIENT_IP'])){
          $ip=$_SERVER['HTTP_CLIENT_IP'];
        }
        //to check ip is pass from proxy
        elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
          $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
          $ip=$_SERVER['REMOTE_ADDR'];
        }
        return $ip;
    }
    //The user
    $visitorIp = getUserIP();
    
    // Now let's search if this IP is blackliated
    $status = array_search($visitorIp, $denied_ips);
    
    // Let's check if $status has a true OR false value.
    if($status !== false){
        echo '<div class="error">Your IP has been banned! Stop spamming us!</div>';
        // header("Location: http://zombo.com");
        // exit; 
    }
    

    There's also a great article at Perishable Press: http://perishablepress.com/how-to-block-ip-addresses-with-php/

    0 讨论(0)
  • 2020-12-05 12:24

    using revive's code, use this to get wildcard search working

    // Now let's search if this IP is blackliated
    $status = false;
    foreach($denied_ips as $val)
    {
        if (strpos($val,'*') !== false)
        {
            if(strpos($visitorIp, array_shift(explode("*", $val))) === 0)
            {
                $status = true;
                break;
            }
        }
        else
        {
            if(strcmp($visitorIp, $val) === 0)
            {
                $status = true;
                break;
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-05 12:26

    Convert the dotted quad to an integer:

    $ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));
    
    // only allow 10.0.0.0 – 10.255.255.255
    if (!($ip >= 167772160 && $ip <=  184549375)) {
        die('Forbidden.');
    }
    
    0 讨论(0)
  • 2020-12-05 12:33

    Make a substring :) For example for blocking 89.95.25.* you make a substring of the IP, cutting off the last two numbers and compare it to "89.95.25."

    0 讨论(0)
提交回复
热议问题