¿Te ha gustado el artículo?
4
¿Te ha gustado el artículo?
4

Correo seguro: protege tu email de los spambots

La Ley 34/2002, de 11 de julio, de servicios de la sociedad de la información y de comercio electrónico, se ocupa en el artículo 9 de las obligaciones de los prestadores de servicios en Internet (cualquier empresa u organización cuya oferta se presente en una página web) y, entre estas, del deber de “disponer de los medios que permitan, tanto a los destinatarios del servicio como a los órganos competentes, acceder por medios electrónicos, de forma permanente, fácil, directa y gratuita, a la siguiente información: a) Su nombre o denominación social; su residencia o domicilio o, en su defecto, la dirección de uno de sus establecimientos permanentes en España; su dirección de correo electrónico y cualquier otro dato que permita establecer con él una comunicación directa y efectiva.”

Como se ve, publicar la dirección de correo electrónico es una obligación. Sin embargo, mostrarla públicamente alberga el riesgo de convertirla en blanco de ataques de robots de spam (spambots), que no solo son molestos, sino que, si se dedican a distribuir correos de phishing, constituyen un riesgo serio para la seguridad. Lo mismo se puede decir de los programas dañinos que los cibercriminales esconden, preferentemente, en archivos adjuntos. No obstante, la necesidad crea la inventiva, por lo que existen diversos trucos con los que los propietarios de páginas web pueden limitar los ataques de estos spambots sin incumplir con las obligaciones legales. A continuación, te mostramos una selección de los más populares y estudiamos sus pros y contras.

Email harvesting: a la caza de los correos electrónicos

Con este nombre se conoce a la obtención automática (también llamada extracción), generalmente mediante un software, de direcciones de correo para poder enviar publicidad desleal, para llevar a cabo ataques de phishing o para distribuir software malicioso. Los programas que se utilizan para ello, los denominados “Email harvester” o, como se conocen popularmente, “cazacorreos”, recorren páginas web, listas de correo, foros o plataformas sociales para extraer direcciones de correo electrónico. Para ello, el programa se fija en la sintaxis característica de estas direcciones, de forma que busca patrones sencillos en el código fuente de una web detrás de la arroba (@), un signo que no suele encontrar uso en los textos que forman parte del contenido, pero que se utiliza para separar el nombre de usuario del dominio en una dirección de correo. Variar la forma de escribirla tampoco ofrece protección, puesto que los spambots más refinados ya reconocen subterfugios tales como [at], [AT], (at), (AT), así como otros tipos de variantes.

usuario@dominio.es

usuario[at]dominio.es

Si a la arroba o a su equivalente les siguen secuencias de caracteres separadas por un punto, es un claro indicio para el programa de extracción de correos de que se trata de una dirección de correo. Solucionar el punto con una forma alternativa de escribirlo tampoco sirve hoy de mucho y además no se lee bien:

usuario[AT]dominio[punto]es

Aún más revelador es que el símbolo arroba es el enlace al correo en HTML según el patrón "mailto: usuario@dominio.es", enlace que permite a los usuarios que visitan la página abrir su programa de correo solo haciendo clic en él. La dirección del receptor se copia automáticamente en el campo del destinatario, lo cual es muy práctico, pero delata información a los spambots fácilmente sobre dónde pueden obtener una dirección de correo.

Los propietarios y administradores de páginas web hacen bien, por estos motivos, en rebelarse contra los formatos más clásicos a la hora de disponer sus opciones de contacto públicamente en la red, respetando, eso sí, la legibilidad, para permitir un acceso óptimo universal a la dirección de correo.

Así se integra una dirección de correo sin protección

Para encontrar la mejor forma de protegerse de los email collectors, es útil conocer cómo suele integrarse una dirección de correo electrónico en una página web con HTML. Una forma muy sencilla de hacerlo, ofreciendo una visualización sin barreras, es añadiendo este código:

<p>Si desea más información no dude en escribirnos a: 
  <a href="mailto: usuario@dominio.es "> usuario@dominio.es </a>.
</p>

Lo que muestra el navegador cuando un usuario visita esta página es:

Si desea más información no dude en escribirnos a: usuario@dominio.es.

Desde el punto de vista del usuario, se trata, sin duda, de una visualización ideal. Muchos métodos de protección de direcciones de correo optan, para que este factor de legibilidad y usabilidad se mantenga, por hacerla irreconocible en el código fuente sin que por ello se vea perjudicada la vista en el navegador. Otra posibilidad consiste en separar la dirección de correo de la propia página y crear una redirección del lado del servidor para desviar al usuario al enlace “mailto”. Por el contrario, mostrar la dirección de correo con variaciones en la vista del navegador es menos frecuente, precisamente por la disminución de la comodidad para el usuario y la poca efectividad frente a spam.

Los trucos más efectivos con que proteger un email se basan en sustituciones, enmascaramiento o encriptaciones en el código fuente, que obstaculizan a los spambots sin incomodar a los usuarios.

Sustitución de la dirección en el código fuente

Las estrategias de sustitución borran la dirección completa del código fuente y la sustituyen por una representación gráfica de la misma o por una redirección al link “mailto”.

Insertar la dirección de correo como elemento gráfico

Integrando una dirección de correo electrónico como gráfico se logra mantener la legibilidad, dificultando la tarea a los extractores. Sí, es verdad que algunos spambots pueden examinar elementos de imagen dentro de un texto mediante el OCR (Optical Character Recognition), pero en realidad se trata de una minoría, por lo que, comparativamente, este método representa una alta protección contra spam. Sin embargo, supone ciertas limitaciones en cuanto a la usabilidad de la página web. El siguiente código HTML muestra cómo integrar una dirección de correo como un archivo de imagen:

<img src="Pfad/archivografico.png" with="120" height="20" alt="Si desea más información no dude en escribirnos a: usuario@dominio.es">

Lo que ven los usuarios en el navegador es la siguiente imagen:

Aunque la dirección es legible perfectamente para el usuario, no se puede copiar ni enlazar como “mailto” y, si para la mayoría de los usuarios tener que teclearla manualmente supone una incomodidad, para aquellos con problemas de visión no está disponible. Es por eso que, desde el punto de vista de la accesibilidad, se recomienda añadir información sobre la imagen en el atributo “alt”, que sí que pueden ser interpretados por lectores de pantalla, pero también por los spambots. De una forma u otra se sale perdiendo, así que no es muy recomendable basar la protección en él.

Crear una redirección a mailto

Una buena solución a la hora de proteger un email de los spambots es separarla de la página web en sí. Para ello se utiliza un script que guía a los usuarios, tras hacer clic en un enlace, al enlace “mailto”, que abre su programa de correo automáticamente. Para los robots que examinan el código de la web un enlace de este tipo se asemeja a un enlace a un archivo, de forma que se impide la lectura automática.

Este método se puede implementar, por ejemplo, como un enlace a un archivo PHP conteniendo la redirección:

<p>Si desea más información no dude en escribirnos a
  <a href="redirect-mailto.php">E-Mail</a>.
</p>

El contenido del archivo redirect-mailto.php es un script que dirige al enlace “mailto” real:

<?php
header("Location: mailto:usuario@dominio.es"); 
?>

Como el archivo PHP se procesa a nivel del servidor, los spambots que leen el código fuente de una web no tienen ninguna opción de acceder a la dirección de correo. Si es necesario que la dirección aparezca visualmente, se recomienda combinar este método con su integración como elemento gráfico. Por contrapartida, el usuario necesita un programa cliente que pueda acceder a la dirección de correo mediante el enlace “mailto”, en la práctica un programa de correo como Outlook o Thunderbird, o de correo web en los navegadores nuevos.

Enmascarar la dirección de correo

Si no se quieren aplicar ninguna de las soluciones mencionadas, cabe la posibilidad de recurrir a estrategias alternativas que permiten codificar las direcciones, ocultarlas con elementos adicionales o componerlas de forma dinámica con JavaScript en el navegador.

Para implementar una codificación sencilla ya bastan las entidades de HTML, el URL encoding o la codificación hexadecimal. Las estrategias de ocultación más simples utilizan la función de comentario, elementos HTML y CSS. Más complejo, por el contrario, es enmascarar una dirección componiéndola dinámicamente.

Todas estas soluciones se diferencian claramente de la reescritura de los signos más característicos en que la manipulación de la dirección tiene lugar en el código fuente y no tiene efectos en la forma de visualizarse en el navegador.

Codificar la dirección de correo electrónico

Los métodos de codificación más utilizados con el fin de ocultar direcciones de correo a los programas “cazacorreos” se apoyan en entidades de HTML, en la codificación hexadecimal o en la representación porcentual propia del URL Encoding. Estos sistemas de conversión se desarrollaron originariamente para representar caracteres especiales con otros convencionales que pudieran mostrarse en el navegador, de tal forma que, al ser traducidos automáticamente en la vista del navegador, se prestan de forma óptima para enmascarar correos.

Para disfrazar los caracteres propios de una dirección de correo como usuario@dominio.es con ayuda de entidades de HTML, se traducen a esta forma alternativa de escritura:

&commat; = @

&period; = . (punto)

Si lo añadimos a la dirección de correo resulta la siguiente frase en el código fuente:

<p>Si desea más información no dude en escribirnos a: 
<a href="mailto:usuario&commat;dominio&period;es">
usuario &commat;dominio&period;es</a>
</p>

Como las entidades de HTML solo fueron definidas para caracteres especiales, este método de codificación no permite cifrar ni la dirección entera ni la partícula esencial “mailto”. Para esto es mejor una codificación hexadecimal, para lo cual se recurre a los caracteres Unicode y se notan siguiendo este esquema:

&#secuenciadecaracteres;

Normalmente se usa el número hexadecimal de cada signo precedido de una pequeña “x”. Es así como la letra “m” se puede traducir como "&#x6d;" o en formato decimal como "&#109;". La dirección de nuestro ejemplo usuario@dominio.es, incluido el enlace “mailto”, se traduciría así:

<p>Si desea más información no dude en escribirnos a
<a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#x75;&#x73;&#x75;
  &#x61;&#x72;&#x69;&#x6f;&#x40;&#x64;&#x6f;&#x6d;&#x69;&#x6e;
  &#x69;&#x6f;&#x2e;&#x65;&#x73;"</a>
</p>

En Internet es fácil encontrar listas de caracteres para poder realizar la traducción de la dirección de correo electrónico. En la página htmlarrows.com, por ejemplo, se encuentra una lista elaborada de forma clara y exhaustiva con las equivalencias de todos los caracteres en distintos métodos de codificación. Si se quiere codificar la dirección completa, los programas de codificación, descargables de forma gratuita como aplicación web en multitud de páginas, pueden resultar muy útiles.

Otra vía para proteger direcciones de correo frente a los spambots es el llamado código porciento (encoding URL), también llamado código URI o código URL. Este procedimiento fue originariamente desarrollado para convertir los caracteres especiales de una dirección URL en una representación que pudiera ser interpretada por el navegador. Se utilizan para ello combinaciones de 3 caracteres compuestas por el código ASCII hexadecimal del carácter precedido por el símbolo del porcentaje (%). El siguiente ejemplo muestra cómo enmascarar el símbolo arroba en una dirección mediante el código porciento:

<p>Si desea más información no dude en escribirnos a
  <a href="mailto:usuario%40dominio.es" </a>.
</p>

Con este método se puede codificar una dirección de una forma muy sencilla, pero el nivel de protección es hoy en comparación bastante bajo, ya que entretanto los spambots están programados de tal manera que pueden descifrar sin problemas un forma tan básica de codificación como esta.

Disfrazar una dirección con HTML y CSS

En principio, si intercalamos caracteres adicionales en la dirección de correo electrónico, interrumpiéndola, es posible despistar a las arañas “cazacorreos”, puesto que estos programas ya no percibirían la dirección como un todo, impidiendo la selección automática. Una opción muy sencilla de implementarlo la ofrecen los comentarios en la hoja de HTML, muy útiles para los desarrolladores pero invisibles en el navegador y para el usuario. Los comentarios en HTML tienen esta forma:

<!--Esto es un comentario-->

Lo ideal sería que tales comentarios incluyeran los signos característicos de las direcciones electrónicas, de forma que atrajeran la atención de los robots:

<!-- abc@def -->

<!-- @abc.de -->

Si se intercalan en la dirección de correo electrónico, los spambots que recorren el código fuente tropiezan con ellos, de forma que no pueden leer la dirección como tal:

<p>Si desea más información no dude en escribirnos a: 
usu<!-- abc@def -->ario@domin<!-- @abc.de -->io.es. 
</p>

También se pueden añadir caracteres sin tener que recurrir a la función comentario, si se ocultan por CSS en la vista del navegador. En el siguiente ejemplo, la dirección electrónica se interrumpe con un elemento span. Debido a la característica display a la que se otorgó un valor de none, todo el contenido entre <span> y </span> no se muestra en el navegador, pero obstaculiza la labor del crawler.

<style type="text/css">
span.proteccionspam {display:none;}
</style>

<p> Si desea más información no dude en escribirnos a: 
usuario<span class="spamschutz">SECUENCIADECARACTERES</span>@dominio.es. 
</p>

Mientras que un usuario ve en el navegador la dirección representada correctamente, un spambot selecciona también el texto oculto encapsulado en el elemento span. Esto ofrece a los propietarios y administradores de páginas web la posibilidad de utilizar la dirección usuarioSECUENCIADECARACTERES@dominio.es como anzuelo o honeypot, una forma muy eficaz de obtener las direcciones emitentes de correo basura para bloquearlas.

Inversión del orden de los caracteres

Otra forma de utilizar CSS para ocultar caracteres en el código fuente es invirtiendo el orden de las letras que componen la dirección electrónica. Esto permite escribirlas en el código fuente “al revés” para engañar a los spambots. Así, por ejemplo:

<style type="text/css">
span.ltrText {unicode-bidi: bidi-override; direction: rtl}
</style>
<p>Si desea más información no dude en escribirnos a: 
<span class="ltrText">se.oinimod@oirausu</span>.
</p>

Mientras que los crawlers se encuentran en el código fuente con la secuencia se.oinimod@oirausu, la propiedad de CSS unicode-bidi con el valor bidi-override se ocupa de que el navegador interprete todos los caracteres dentro del elemento span tal y como indica la propiedad direction, es decir, en este caso, de derecha a izquierda: right to left, rtl.

Sin embargo, aunque este método transforme la forma de representar la dirección electrónica, no sirve para despistar a crawlers más avanzados.

Composición dinámica con JavaScript

JavaScript ofrece otra solución que permite reconstruir la dirección de forma correcta en el navegador. Para ello, esta se subdivide en varios fragmentos que compondrán el conjunto completo dinámicamente mientras el servidor entrega la web al navegador. Este es el código necesario:

<script type="text/javascript">
var part1 = "usuario";
var part2 = Math.pow(2,6);
var part3 = String.fromCharCode(part2);
var part4 = "dominio.es"
var part5 = part1 + String.fromCharCode(part2) + part4;
document.write("Si desea más información no dude en escribirnos a: 
<href=" + "mai" + "lto" + ":" + part5 + ">" + part1 + part3 + part4 + "</a>.");
</script>

Entre las líneas 2 y 6 se definen las diferentes partes de la dirección. La definición de @ tiene lugar en dos pasos:

  • La función Math.pow(2,6) en part2 determina el número del carácter en cifras compatibles con ASCII (26 = 64)
  • Mediante la función String.fromCharCode(part2) en part3 se convierte en el carácter correspondiente.

La resolución de los fragmentos definidos entre part1 y part5 se produce en las líneas 7 y 8 con la función document.write(). Esto indica que la dirección de correo electrónico solo estará disponible completamente cuando el cliente (el navegador) ejecute el script.

También es posible una variante en la cual el script se inicie cuando el usuario lo ordene haciendo clic.

Los métodos antispam que utilizan scripts de composición dinámica se basan en la suposición de que los programas extractores de correos no pueden interpretar completamente JavaScript. Si este es el caso, ofrecen un alto nivel de protección. La desventaja es que los usuarios que han desactivado JavaScript en sus navegadores no pueden ver la información de contacto, aunque esto afecte a una minoría de usuarios. Para estar seguros de que se hace lo necesario para cumplir la ley respecto a la disposición de los datos de contacto, es recomendable mostrar la dirección también como elemento gráfico.

Encriptar el correo electrónico

Con JavaScript también se puede cifrar la dirección con el objetivo de protegerla frente al spam y disfrutar de un correo más seguro. Un método muy utilizado es ROT13, para el que solo se necesitan unas líneas de código:

<script type="text/javascript">
function decode(a) {
  return a.replace(/[a-zA-Z]/g, function(c){
    return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13)
                               ? c : c - 26);
  })
}; 
function openMailer(element) {
var y = decode("znvygb:orahgmre@qbznva.qr");
element.setAttribute("href", y);
element.setAttribute("onclick", "");
element.firstChild.nodeValue = "Se abre el programa de correo";
};
</script>
<a id="email" href=" " onclick='openMailer(this);'>E-Mail: haz clic aquí</a>

En este ejemplo, el código muestra en la línea 9 la versión cifrada de la dirección usuario@dominio.es, incluyendo el “mailto” (znvygb:orahgmre@qbznva.qr), así como define entre las líneas 2 y 7 cómo se ha de descifrar este código. La función de la línea 8 a la 13 abre el programa de correo del usuario y escribe la dirección cifrada en el campo de destinatario.

El script se inicia en el momento en que el usuario hace clic en el texto de anclaje E-Mail: haz clic aquí (líneas 15-16), mostrando la frase “Se abre el programa de correo” (línea 12).

Esta forma de encriptación también se basa en el presupuesto de que los spambots, bien en parte o bien por completo, no pueden interpretar el lenguaje de scripts del lado del cliente. En teoría, una dirección encriptada así podría utilizarse como honepot. En este caso el dominio no debería cifrarse.

Proteger el email con un CAPTCHA

El término CAPTCHA corresponde a las siglas de Completely Automated Public Turing test to tell Computers and Humans Apart (es decir, prueba de Turing completamente automática y pública para diferenciar ordenadores de humanos) y sirve para diferenciar a los robots de las personas, de forma que también se puede usar para defender a las direcciones de correo de los spambots. Por este sistema las direcciones cifradas se muestran en texto plano solo cuando el usuario se ha acreditado como persona. Estos tests pueden contener tareas como teclear una combinación de cifras y letras dada, pero también es posible encontrarse con tareas de cálculo sencillas, ejercicios de combinaciones o rompecabezas.

Comparativamente, el nivel de protección que ofrecen los captchas es muy alto, ya que las direcciones de correo o no se muestran en absoluto o solo aparecen cifradas en el código fuente. Además, se dejan integrar en el diseño de una página al contar con amplias posibilidades de diseño. Sin embargo, el esfuerzo adicional que supone para los usuarios acceder a la dirección de correo tiene un efecto negativo en la usabilidad de la página, oponiéndose claramente a la recomendación de accesibilidad en relación con la información de contacto.

Google es uno de los proveedores de servicio gratuito de captcha con reCAPCHA.

¿El formulario de contacto como alternativa?

Muchos propietarios de páginas web, en lugar de publicar abiertamente la dirección de correo electrónico, con toda la problemática que esto implica, optan por ofrecer un formulario de contacto mediante el cual los usuarios que lo deseen pueden enviar un  mensaje incluyendo su nombre y su dirección electrónica. Su integración en la página se lleva a cabo con lenguajes de programación del lado del servidor como PHP y para obstaculizar el envío automático de los spambots a los formularios, se protegen generalmente mediante captchas. Pero no está claro si un formulario basta para cumplir con el deber legal de proporcionar la información de contacto. Así que, aquellos gestores web que solo implementen esta solución, corren el peligro de ser sancionados.

Cuál es la mejor manera de lograr un correo más seguro

Decidirse por una u otra estrategia de protección depende en primera instancia de qué requisitos ha de cumplir la representación visual de la información de contacto digital y de cuáles son los medios técnicos de que se dispone. La redirección de “mailto” utilizando PHP o un lenguaje de programación del lado del servidor equivalente ofrece un alto grado de protección, pero tiene que contar con el soporte del fundamento de hosting de la página web. Para cumplir con la normativa legal que obliga a mostrar visualmente la dirección de correo electrónico en la web, se recomienda completar la información con una representación gráfica de la dirección.

Las opciones con menores garantías de seguridad son todas aquellas basadas en una reescritura simple o en la codificación con entidades HTML, codificación hexadecimal o encoding de URL, aunque este último método sirve como paso previo al cifrado. Enmascarar o cifrar la dirección mediante JavaScript supone, por el contrario, una protección mucho más fiable contra spambots. No obstante y como ya se mencionó, también en este caso es recomendable añadir a la información de contacto una representación de la dirección electrónica como archivo de imagen, especialmente si la dirección no se crea en la página sino en el cliente mailto.

La opción de crear un formulario de contacto como alternativa a la dirección de correo no es recomendable en absoluto, ya que no es considerado por todas las instancias jurídicas como un sustituto equivalente a la dirección.

Cifrado JavaScript Seguridad