Antiguo y abandonado blog de Ricardo Galli :-(

Monday 21/2/2005

WP plugin: check IP addresses behind proxies

Filed under: Mis hacks, soft libre — gallir @ 17:42

I don’t know how it is in your country, but here Telefónica –our major carrier and ADSL provider– has installed several transparent proxies that hide the real IP address of most comments. Therefore most of comment reports sent by email to the posts’ authors become useless.

Luckily, those proxies respect standards and send the real client IP address in the HTTP headers. So it was just too obvious to hack a “filter plugin” for WP 1.5.

Just download it (or a zip file), install it in your plugin directory, activate it.

7 Comments

  1. Hace un tiempo estaba buscando la solución definitiva para obtener la IP real del usuario y al final desistí.

    De todos los datos que recibes del usuario el único del que puedes fiarte es la IP que se utiliza en la conexión al servidor (REMOTE_ADDR). El resto pueden ser creados, alterados y/o eliminados tanto por el usuario como por los proxies intermedios.

    Si yo, como spammer (que no lo soy, pero podria), quisiera saltarme esta “protección” tan sólo tendria que hacerme pasar por uno de estos proxies añadiendo la cabecera HTTP_X_FORWARDED_FOR con una IP aleatoria.

    Por cierto, la variable HTTP_X_FORWARDED_FOR puede contener más de una IP en el caso de pasar por más de un proxy. Por ejemplo, las conexiones que recibe mi web tienen tienen un HTTP_X_FORWARDED_FOR parecido a “213.96.59.184, 80.58.42.170″

    Comment by Francesc — Saturday 5/3/2005 @ 16:07

  2. Tienes razónen cuanto a lo de engañar, pero en este caso queda un registro en los logs del Apache con la dirección real. Sin este plugin y en caso que esté detrás de un proxy, no tienes forma de vaeriguar luego la dirección.

    Lo de varias direcciones encadenadas, gracias, no sabía que podían venir así, veré si cambio el programa, pero no sé cuál coger (el WP sólo permite una dirección).

    Comment by gallir — Saturday 5/3/2005 @ 16:12

  3. … pero no sé cuál coger …

    La última no privada parece un buen candidato (teniendo en cuenta el caso que en algunos pasos “intermedios” las IPs podrían ser privadas, como reverse proxies en localhost, proxies que pasan por redes con IPs privadas sin ser ocultados, etc).

    Por ejemplo, si tenemos esto: servidor - reverse_proxy_servidor - proxy_telefonica - proxy_intranet_cliente - cliente, se cogeria la IP de proxy_intranet_cliente.

    Comment by Francesc — Saturday 5/3/2005 @ 17:55

  4. Hecho, ya es la versión 1.1. ¿Lo pruebas?

    Comment by gallir — Sunday 6/3/2005 @ 13:38

  5. […] 8221; Clasificado bajo: Software libre, Mis hacks — gallir @ 14:01 Thanks to Francesc’s comments. I released version 1.1. This version checks for multiple IP adresses fo […]

    Pingback by Ricardo Galli, de software libre » New version of “check IP addresses behind proxies” — Sunday 6/3/2005 @ 14:01

  6. Parece que el orden en el que se almacenan las IPs en la variable HTTP_X_FORWARDED_FOR es de la más lejana a la más cercana, por lo que en la función check_ip_behind_proxy habría que cambiar esto:

    $user_ip = $ip;

    por esto:

    return $ip;

    Con este cambio funciona perfectamente.

    También se podría cambiar la función isIPIn por esto (aunque la funcionalidad es la misma):

    function isIPIn($ip,$net,$mask) {
    $bitmask = 0xffffffff << (32 - $mask);
    return ((ip2long($ip) & $bitmask) == (ip2long($net) & $bitmask));
    }

    Ah, por cierto, grácias por el plugin.

    Comment by Francesc — Sunday 6/3/2005 @ 22:33

  7. loque yo quereia saber es como configurar una nueva ip sacada de otro lugar espefificamente de un ciber pero lo que yo quisiera e utilizarla en mi casa

    Comment by germanelloco — Wednesday 2/11/2005 @ 14:55

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress