Ofuscando emails desde Java
Domingo, 11 de Febrero de 2007Para evitar el spam, hay muchas maneras de ocultar el email en una página html. Una de las más efectiva podrÃa ser crear una imagen con la dirección como tengo puesto en mi página de contacto:
. Puedes crear esta imagen con el photoshop o desde alguna utilidad externa como esta.
Sin embargo, puede que estemos desarrollando una aplicación en Java y tengamos un listado de usuarios público con sus emails. Crear una imagen para cada uno de ellos podrÃa ser muy laborioso, y escribir el email sin ofuscar u ocultar podrÃa ser peligroso.
Obviando los trucos de poner los emails con el formato “nombre ARROBA dominio PUNTO es” o “email@[QUITAESTO]dominio.es” podemos escribir cada carácter ASCII de nuestro email uno por uno en hexadecimal o decimal. Para esto, utilizaremos las entidades html con este formato:
- &#D; siendo D el número del código ASCII en decimal
- &#xH; siendo H el número del código ASCII en hexadecimal
Por ejemplo, para pintar la letra a, cuyo código ASCII es 97 en decimal y 61 en hexadecimal podemos utilizar a o a
(Una tabla completa con todos los caracteres ASCII aqui)
Bueno, ahora lo que queremos es escribir nuestros emails codificados en decimal y hexadecimal. Para eso utilizaremos esta clase Java:
public class HtmlCoder {
public static final Random r = new Random(System.currentTimeMillis());
public static String randomHtmlEncode(String data) {
if (data == null || data.length() == 0) return data;
StringBuffer sb = new StringBuffer();
for (int i = 0; i < data.length(); i++) {
switch (r.nextInt(3)) {
case 0 : // En decimal
sb.append("").append((int)data.charAt(i)).append(";");
break;
case 1 : // En hexadecimal
sb.append("").append(Integer.toHexString(data.charAt(i))).append(";");
break;
case 2 : // Tal cual
sb.append(data.charAt(i));
}
}
return sb.toString();
}
}
Esta clase crea un texto codificando cada carácter en su equivalente ascii en decimal, hexadecimal o sin codificar de manera aleatoria. De esta manera, un email se quedarÃa asÃ: soypicapica@yahoo.es
















Febrero 12th, 2007 5:17 pm
Hola:
Hay una cosa que creo que se me escapa. Entiendo que se ponga una imágen o lo del [ARROBA] y [QUITA ESTO] porque asà el email queda legible para los humanos, pero no para los robots rastreadores.
Con el codificador este no queda legible para nadie, asà que supongo que no es para poner el email en una web. ¿Para qué sirve entonces?
Se bueno.
Febrero 12th, 2007 5:20 pm
Hola:
Ya está aclarado, ya decÃa yo que se me escaba algo. Se pone eso en el html y el navegador lo visualiza correctamente. Perdón.
Se bueno.
Febrero 13th, 2007 12:20 pm
Nada hombre, si es que eso me pasa por poner trucos pero no decir para que sirven! De todas formas, cuanto más miro la “solución”, menos me convence.
Si los email-harvesters solo buscan la @ para detectar emails, también pueden hacerlo buscando su código correspondiente en ascii @ o hexadecimal @ …. no me convence el truco para nada…