Cómo anonimizar una IP con PHP

Anonimizar ips con php

Desarrollando un plugin de visitas para WordPress me he encontrado con la necesidad de anonimizar las IPs antes de almacenarlas en la base de datos. Todo ello para cumplir con la protección de datos.

La función del proceso es bastante simple: almacenar parte de la IP, y otra parte sustituirla por un carácter, un asterisco. Para ello utilizaríamos PHP, leguaje de programación que usa el core de WP.

Pensando que alguien habría tenido la misma necesidad, que estoy seguro de que es así, he realizado una búsqueda rápida. Estaba convencido de que iba a encontrar la respuesta en pocos minutos, si no en segundos. Pero no, o ha sido así. Y me he puesto manos a la obra a crear mi propia función anonimizadora de IP.

Anatomías de las IPs

En primer lugar he documentado la estructura de las IPs: IPv4 e IPv6. Tenía algunos conocimientos pero quería estar seguro que no me encontraría sustos.

Las IPv4 la componen 4 cuerpos de un valor numérico en el rango entre 0 y 255, separados por un «.».

Las IPv6 la componen 8 partes con un valor hexadecimal (alfa numérico) de 4 caracteres, separados por «:».

Lógica del código

En primer lugar hay que obtener la IP de la visita. Hay diferentes métodos, en este caso he optado por la variable del servidor

A continuación, identificar si nuestra visita está usando IPv4 o IPv6. Para simplificar la explicación lo voy a montar sobre dos condicionales Ifs. Para optimizar el código podría hacerse sobre uno solo.

Dentro de cada comprobación tenemos que dividir el string de la IP con la función explode de php, generando un array de valores. Para las IPv4 lo hacemos con el valor «.», y el las IPv6 con «:»

A continuación asignamos el valor para el último elemento de array generado en el paso anterior. En mi caso lo he sustituido por un asterisco. Ten presente que los valores identificadores de la posición en el array, comienzan por 0. Por tanto en IPv4 e identificador es 3 y en 7 en el caso de la IPv6.

Finalmente pasamos de array a string la IP ya anonimizada.

Código anonimizador de IPs: IPv4 e IPv6

//Obtención de la IP
$ip = $_SERVER['REMOTE_ADDR'];

//anonimizar IPv4
    if (strpos($ip, ".") !== false) {
        $ipanom = explode(".", $ip);
        $ipanom[3] = "*";
        $ip = implode(".",$ipanom);
    }
//anonimizar IPv6
    if (strpos($ip, ":") !== false) {
        $ipanom = explode(".", $ip);
        $ipanom[7] = "*";
        $ip = implode(".",$ipanom);
    }

//Almacenar la IP...