Tutorial Ofuscando nuestro email para evitar crawlers (HTML/PHP)

fermino

Piedra
Usuario de Piedra
Mensajes
34
Puntuación de reacción
0
Cuando estaba comenzando todo el mundo web (de programación hablando), por ahí leí que existían unas tales spiders, crawlers, que buscaban por todos lados intentando encontrar direcciones de email a las cuales spammear, leí que como protección, recomendaban no añadir la dirección a nuestra web con el clásico mailto, sino ponerlo en una imagen, etc...

Bastante tiempo después, leí por ahí un comentario sobre cómo Github hacía esto. No, no los ponía en plano, no era javascript, no amenazaba a las arañas con un bate ni nada por el estilo. Las direcciones, las ofuscaba...

Me puse a ver qué onda con esto, cómo era. En mi firefox cuando pasaba el mouse por ahí arriba la dirección se veía común y corriente, "mailto:fermino...", Inspeccionar elemento?
Nada, se veía exactamente igual:



No creí que todo eso fuera dinámico, y efectivamente, con un View source, bastaba.
CTRL + F, "mailto", y...



"Comienza con 'x', tiene dos dígitos después, por ahí hay una 'd', una 'e', una 'f'... Seh, tiene que ser hexadecimal, ¿no?".
Como, tengo que admitir, nunca había usado esa forma de insertar caracteres (en hexa, con &#x--;), me puse a googlear sobre el tema. Una buena tabla ascii, y listo.

Bien, mas o menos entiendo como es ésto, ahora; ¿qué escribo?.
Ahí aprendí la utilidad de las funciones ord y chr, de PHP.
Ord, devuelve el número ASCII del caracter dado; chr, el caracter correspondiente al número ASCII.

"Oka, puedo usar chr sobre cada caracter de la string para obtener el número... Pero, ¿cómo saco el hexa?"
Dechex, le tiramos un número entero (sistema decimal), y nos devuelve la cadena correspondiente, en hexa (base 16). Sí, luego descubriría que se puede hacer "&#<numero entero, no hexa>;", y es lo mismo; pero bah, ¿no queríamos copiar a Github?

Ahora sí, "Paso sobre cada caracter chr, eso lo paso por dechex, y listo, lo añado a una cadena con el código final, ¡buenísimo! :D"...

Y algo así resultó:

PHP:
<?php
    function ObfuscateEmail($Email)
    {
        $Code = 'mailto:';

        $Length = strlen($Email);

        for($i = 0; $i < $Length; $i++)
        {
            $Char = dechex(ord($Email[$i]));
            $Code .= "&#x{$Char};";
        }

        return $Code;
    }

    echo ObfuscateEmail('your-email@domain.tld');

https://gist.github.com/fermino/812f2731f9d92a2dfafe

Tal vez alguno de estos días lo agarre y le añada alguna que otra cosa, la posibilidad de usar o no hexa, un script que busque en la página direcciones y las ofusque, usando ob_* para tomar todo el contenido antes de ser mostrado y parsearlo, etc...

Y efectivamente, acá una versión actualizada: https://github.com/fermino/Email-Utilities-PHP

Regards!
-fermino-

Fuente (mi blog :p): http://itmk-labs.blogspot.com/2015/02/ofuscando-nuestra-direccion-de-email.html
 

sens

Estafador
Usuario de Bronce
Mensajes
524
Puntuación de reacción
0
Lo tendre en cuenta el tutorial
 

angre

Cobre
Usuario de Bronce
Mensajes
608
Puntuación de reacción
0
Me parece interesante, pero, si se conoce la forma en que Github ofusca los emails. ¿no podrían hacer un spider para github que lo desofusque? es seguir el proceso a la inversa
 
Mensajes
42
Puntuación de reacción
0
Lo cierto es que desde hace muchos años la mayoría ya dio por perdida la lucha contra este tipo de scrapers.

Usar una imagen es un coñazo para el usuario final. Lo que comenta @fermino (el uso de entidades / ofuscación simple) tiene el problema de ser fácilmente revertido, eso sin contar que la mayoría de bots actuales disponen de OCR para extraer los correos.

Soluciones para minimizar el spam en estos casos:

1) Usar un formulario de contacto en lugar de publicar el correo. Simple pero efectivo.
2) Un poco de ingenio a la hora de publicar tu email. Ejemplo: "Mi correo es mi nombre arroba mi dominio". Dependerá de tu sector, pero tampoco estás pidiendo que se resuelva el último teorema de Fermat.
3) Usar una solución que ofrece RECAPTCHA: reCAPTCHA Mailhide: Free Spam Protection. Con esta solución tendrás que resolver un RECAPTCHA para poder visualizar el correo.

Hay otras muchas "soluciones", pero aplicarlas supondría que nos quedaríamos sin saber quién es el nuevo príncipe nigeriano que nos ha dejado toda su herencia :)
 

fermino

Piedra
Usuario de Piedra
Mensajes
34
Puntuación de reacción
0
Lo cierto es que desde hace muchos años la mayoría ya dio por perdida la lucha contra este tipo de scrapers.

Usar una imagen es un coñazo para el usuario final. Lo que comenta @fermino (el uso de entidades / ofuscación simple) tiene el problema de ser fácilmente revertido, eso sin contar que la mayoría de bots actuales disponen de OCR para extraer los correos.

Otra forma sería hacer esto con javascript, ofuscando, y todo eso, pero bah... Contra OCR nada de esto serviría...

Regards!
-fermino-
 
Mensajes
21
Puntuación de reacción
0
La opcion mas elegante me parece la de reCaptcha mailhide, facil para los usuarios y dificil para los bots.
 
Mensajes
7
Puntuación de reacción
0
No entendí mucho el código ya que no veo el correo insertado, pero supongo que debe estar en hexadecimal.
Ya lo voy a investigar con más tiempo..

Pregunta ¿Esto se puede aplicar a un post y/o página de WordPress? ¿Alguien sabe cómo?
 
Arriba