Protección de direcciones de correo mediante SVG, en lugar de JavaScript
(rouninmedia.github.io)- Para ocultar una dirección de correo pública de los bots recolectores de spam y aun así permitir que los visitantes contacten de inmediato, se usa un método que coloca el texto del correo y el enlace
mailto:dentro de un SVG - La protección basada en JavaScript puede ser más sofisticada, pero preocupa que la función de contacto en sí tenga una dependencia de JS
- Este enfoque inserta un documento SVG externo en el HTML mediante
y coloca el enlace real no en el HTML, sino en el elementodentro del SVG - El SVG ayuda a ocultar el contenido como si fuera una imagen, pero como usa el elemento ``, el visitante puede copiar la dirección de correo
- No es una solución para bloquear incluso a los spambots sofisticados, pero sí resulta útil para reducir el riesgo de exposición ante scripts simples de recolección de correos
Cómo ocultar una dirección de correo con SVG
- Las direcciones de correo públicas son fáciles de exponer a spambots recolectores de emails, por lo que necesitan una capa de protección
- Las técnicas de protección más comunes combinan HTML, CSS y JavaScript, pero usar JavaScript hace que la función de contacto dependa del entorno de ejecución obligatorio de la página
- El método con SVG gestiona tanto la visualización del correo como el funcionamiento del enlace sin usar JavaScript en absoluto
- Incluso si JavaScript está desactivado, el visitante puede usar la dirección de correo mostrada en la página, y para los spambots queda menos expuesta de forma directa que el texto HTML normal
- Como otras técnicas de protección basadas en frontend, no puede proteger por completo una dirección de correo pública frente a spambots persistentes y sofisticados
- Demo en vivo: SVG-based Email Protection
Implementación en HTML y SVG
- El documento HTML inserta un archivo SVG externo mediante ``
- El mismo documento gráfico SVG puede insertarse una o varias veces dentro del HTML
- El HTML de ejemplo asigna a la clase
.svg-email-protectionlos estiloswidth: 180px,height: 24pxyvertical-align: middle, y en el cuerpo carga el archivo SVG con `` - El archivo SVG es un documento `` con
viewBox="0 0 200 24", y dentro contiene el texto del correo y el enlacemailto:myemail@mydomain.tld- Dentro de
vany `` - En `` se muestra
myemail@mydomain.tld - En los estados
rect:hoverya:focuscambian el color de fondo, color del texto, grosor, subrayado y estilo de sombra
- Dentro de
Accesibilidad y materiales de referencia
- Todo el documento SVG usa
aria-labelledbyapuntando a, y eldentro del SVG incluye unaria-labelcon la misma llamada a la acción - Cuando el foco de tabulación del teclado llega al ancla dentro del SVG,
yse resaltan juntos para mostrar el estado de foco - Materiales relacionados:
1 comentarios
Opiniones en Hacker News
Me cuesta creer que sea así
Pero, en lo personal, desde alrededor de 2015 ya no noté ninguna diferencia, y ni siquiera aumentó el spam que había que filtrar
Hoy las empresas pueden vender listas de usuarios o puedes comprar listas enormes de emails filtradas de servidores comprometidos, así que rastrear la web para recolectar emails es probablemente una de las formas menos eficientes de enviar spam
Ambos sitios tienen miles de visitantes y son sitios populares que indexan los motores de búsqueda y los bots de IA
Las direcciones de email que publiqué en sitios web ni siquiera llegan a la carpeta de spam
Algunas listas de correo parecen generar direcciones de Gmail adivinándolas como si fueran ataques de diccionario, con el formato NOMBRE.APELLIDO o combinaciones de 1 a 10 caracteres
Aun así, el spam que llega a direcciones tipo domain@domain.com es poquísimo, como un mensaje al año
En general, el volumen de spam por email también bajó mucho, y el spam que se envía hoy parece venir de una mezcla de estafadores 419 y aspirantes a estafadores engañados que compraron listas de emails de hace 20 años
No digo que sea un problema grave de privacidad o seguridad, pero es una cuestión de preferencia
Mi dominio es un .com registrado desde hace 24 años, y la dirección de email está puesta tal cual en una etiqueta H3 al inicio de la primera pantalla
El spam en esa dirección no es un problema. Recibo unos 15 al día contando la carpeta de correo no deseado, y gracias a Purelymail está bien
El verdadero problema son los correos transaccionales que no tienen nada que ver con transacciones, los emails promocionales tipo newsletter y las redes sociales que siguen mandando avisos porque no las uso
Hace unos 7 años que no uso la cuenta; ya deberían haberse dado cuenta
En unos casi no hay spam, en otros llegan decenas por día. SpamAssassin hace muy bien el cacheo del spam
A diferencia de la frase “aunque el visitante desactive JavaScript, la dirección de email mostrada en la página sigue siendo usable”, la configuración predeterminada de NoScript en Firefox no renderiza la etiqueta y la reemplaza por un marcador de posición, así que esta técnica no funciona ahí
https://imgur.com/2tCAgAf
No hay razón para que esta técnica en sí no pueda ser accesible, pero el ejemplo del artículo es realmente malo
El artículo pone “Email us!” como etiqueta del svg y del elemento a, lo que hace que la dirección de email real quede oculta para el lector de pantalla
Usar etiquetas aria de esa forma es una muy mala práctica. Salvo que haya una razón muy especial, los usuarios de lectores de pantalla deberían tener la misma experiencia que los demás; y si crees que esa razón es suficiente, lo más probable es que estés equivocado
La forma correcta es poner la dirección de email real en la etiqueta
Si el usuario dice “Click myemail@mydomain.tld”, es posible que el navegador exponga el texto del enlace como “Email us”, por lo que el enlace no se activaría
Aunque no sé si Dragon puede activar enlaces dentro de un SVG
Yo hago esto: reanospaml@maisjsl.com
Igual recibo “spam”, pero son propuestas B2B perfectamente alineadas con el tema del sitio, así que parece que alguien las recolectó manualmente
Aunque correr navegadores headless para recolectar emails es relativamente costoso, así que puede que ese spam no venga del sitio
Como ya dijeron otros, “proteger” emails no solo es inútil, sino que en la práctica también puede ser perjudicial
Hay bastantes sitios donde la mayoría del contenido se lee bien sin JavaScript, pero cadenas como “1920x1080@60Hz” se muestran literalmente como “[email protected]”
Me pregunto si algo así realmente tiene sentido. Es un experimento interesante, pero si el objetivo es evitar a los spammers, es una completa pérdida de tiempo
Es como publicar información para todo el mundo y aun así esperar que somehow solo sea accesible para “la gente buena”
A menos que cambies la dirección de email al menos una vez al mes, basta con que alguien le pase tu contacto a otra persona, lo meta en una base de datos/CRM, o que un servicio sea vulnerado, para que esa dirección termine en una lista y eventualmente circule entre spammers de todo el mundo
Si usas ese email de forma constante, la probabilidad de que pase algo así es prácticamente cercana al 100%
Si ocultar el email a los scrapers realmente funcionara, el spam no existiría. Nunca publiqué mi contacto personal en ningún lado y aun así recibo decenas de spams por semana, pero todos se filtran como spam, así que no es grave
Un amigo mío es realmente muy bueno, y está haciendo prácticamente imágenes responsivas con SVG que incluye JavaScript
Se adaptan programáticamente según el tamaño, y es bastante interesante
El simple hecho de que puedas meter JavaScript dentro de un SVG me parece todavía subutilizado y, al mismo tiempo, algo peligroso
Soy ingeniero backend, así que técnicamente está bastante lejos de mi área, pero se ve muy genial
Dejé de usar métodos así. Los filtros de spam de hoy son lo suficientemente buenos como para que publicar una dirección de email sin ofuscar no parezca aumentar el spam
Otra cosa son otras fuentes de spam, como empresas pésimas que tienen mi email por razones legítimas y aparentemente se lo venden a terceros
En general entra menos de 1 spam al día a mi bandeja de entrada, y eso me parece aceptable
Claro, puede variar según el proveedor de email y el filtro de spam, así que dependerá de cada persona, pero para mí no fue un problema
El email sigue estando en texto plano dentro de un documento XML referenciado desde el código fuente de la página
document.querySelectorAll('a'), el resultado es distinto. Muchas técnicas de scraping usan este enfoque, así que sirve como primera línea de defensaEso sí, si hay un navegador headless para scraping, y sobre la página hace
fetchde la URL actual tal cual, recibe el texto plano y busca emails con regex, puede obtener la dirección. Admito que es un enfoque bastante extraño[0]: fetch('./').then((res) => res.text()).then((text) => console.log(text))
Aunque no sé qué tan efectivo sea eso realmente en el entorno moderno de protección contra spam