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

Nueva versión de OnlyOffice Docs

Desde el equipo de ONLYOFFICE se han puesto en contacto con nosotros para contarnos que…

2 semanas hace

EOF

2 meses hace

CERN

2 meses hace

Agua

2 meses hace

Aire acondicionado

2 meses hace

Eclipse

3 meses hace