Categorías: Tutoriales

Restringir el acceso mediante la dirección IP usando PHP

Si por razones de seguridad o por política de empresa, queremos bloquear las direcciones a un determinado rango o conjunto de IP, os voy a comentar cómo hacerlo de forma simple haciendo uso de PHP.

Lo primero que debemos hacer es crear una función que nos permita conocer la dirección IP del cliente:

function obtenerDireccionIP()
{
    if (!empty($_SERVER ['HTTP_CLIENT_IP'] ))
      $ip=$_SERVER ['HTTP_CLIENT_IP'];
    elseif (!empty($_SERVER ['HTTP_X_FORWARDED_FOR'] ))
      $ip=$_SERVER ['HTTP_X_FORWARDED_FOR'];
    else
      $ip=$_SERVER ['REMOTE_ADDR'];

    return $ip;
}

Una vez hecho esto, el proceso es simple. Veamos distintas posibilidades.

Permitir/restringir acceso a una sola IP

Con esta función, restringimos el acceso sólo a la IP que se le envía a la función. Podemos cambiar el “==” por “!=” para hacer lo contrario.

function restringirIp($ip)
{
    $ipCliente = obtenerDireccionIP();

    if($ipCliente == $ip)
    {
        return true;
    }
    else
    {
        header('location: http://direccion_envio_salida');
        exit;
    }
}

Permitir/restringir acceso a un conjunto de direcciones IP

Hacemos una operación similar, pero en lugar de controlar una sola dirección IP, controlamos un conjunto de ellas presentes en un array:

function restringirConjuntoIps($ips)
{
    $ipCliente = obtenerDireccionIP();

    if (in_array($ipCliente,$ips))
    {
        return true;
    }
    else
    {
        header('location: http://direccion_envio_salida');
        exit;
    }
}

Permitir/restringir acceso a un rango de direcciones IP

Si queremos restringir rangos, podemos valernos de la ayuda de las funciones de tratamiento de cadena. Para permitir el acceso a todas las direcciones de la familia: 150.214.x.x, podríamos hacer lo siguiente:

function restringirRango()
{
    $ipCliente = obtenerDireccionIP();

    if(substr($ipCliente, 0, 8 ) == "150.214.")
    {
        return true;
    }
    else
    {
        header('location: http://direccion_envio_salida');
        exit;
    }
}

Si queréis, podéis modificar la llamada a “substr” para adaptarla a vuestro caso particular.

F. Javier Carazo Gil

Cofundador de CODECTION, empresa especializada en WordPress, autor de un libro sobre WordPress (el primero en español) y multitud de artículos (en medios físicos y virtuales) sobre el tema. Participa en la comunidad WordPress de forma activa siendo parte del equipo organizador de la WordPress Meetup de Córdoba, dando charlas en diferentes WordCamp y siendo autor y coautor de multitud de plugins libres y premium para WordPress de gran éxito.

Ver comentarios

  • En el caso de restricción por rango:

    if(substr($ipCliente, 0, 8 ) == "150.214.")

    Lo comento porque con la cara de las gafas que se autogenera con los caracteres '8' + ')' puede dar lugar a error.

  • @Alberto: gracias por el apunte, no pensé que en la etiqueta PRE también se metería el tema de los emoticonos. Voy a modificarlo.

  • Hola Javier, estaba buscando esta función, me podridas facilitar el código para accesar la funcion? Uso php 5.6. Gracias

Entradas recientes

DeepSeek

2 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

4 semanas hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

1 mes hace