What are the potential pitfalls of using IP range restrictions in PHP for intranet-like protection?

Potential pitfalls of using IP range restrictions in PHP for intranet-like protection include the risk of IP spoofing, where an attacker could forge their IP address to bypass the restriction. To mitigate this risk, it is recommended to also implement additional security measures such as authentication and encryption.

// Example of implementing IP range restriction with additional security measures

$allowed_ip_ranges = array(
    '192.168.1.0/24',
    '10.0.0.0/8'
);

$client_ip = $_SERVER['REMOTE_ADDR'];

$allowed = false;
foreach ($allowed_ip_ranges as $range) {
    if (ip_in_range($client_ip, $range)) {
        $allowed = true;
        break;
    }
}

if ($allowed) {
    // Proceed with intranet-like protection
} else {
    // Show access denied message or redirect to error page
}

function ip_in_range($ip, $range) {
    if (strpos($range, '/') === false) {
        $range .= '/32';
    }

    list($range, $netmask) = explode('/', $range, 2);
    $ip_address = ip2long($ip);
    $range_address = ip2long($range);
    $wildcard = pow(2, (32 - $netmask)) - 1;

    return (($ip_address & ~$wildcard) == ($range_address & ~$wildcard));
}