Método eficaz para ocultar el correo electrónico de los robots de spam


195

En mi página de inicio, estoy usando este método para ocultar mi correo electrónico de los bots de spam:

<a href="admin [at] example.com"
   rel="nofollow"
   onclick="this.href='mailto:' + 'admin' + '@' + 'example.com'">Contact me</a>

¿Qué piensa usted al respecto? ¿Es efectivo? ¿Qué otros métodos conoces o usas?


O este es un duplicado de stackoverflow.com/questions/163628/… , o ese otro no es válido porque es una lista larga de wiki no comunitaria.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

55
Este tiene más votos a favor, respuestas y puntos de vista. No debe cerrarse a favor de que otro tenga menos votos a favor, respuestas y puntos de vista.
abatishchev

1
Lo cerraría para seguir el hecho de que este atrae mucho más.
abatishchev

66
La mejor solución es no compartir su solución . Lamentablemente este es ese tipo de pregunta. Es mejor encontrar su solución y guardarla para usted. Si uno se estandariza, los robots de spam se adaptarán para superarlo.
Dimitris

1
La mejor solución es combinar varias de las soluciones a continuación , por ejemplo, la primera parte del correo electrónico como imagen, la segunda parte this.href.replace(/x/g,''), la tercera parte codificada en hexadecimal, etc. dirección de correo electrónico.

Respuestas:


98

Este es el método que utilicé, con una inclusión del lado del servidor, por ejemplo, <!--#include file="emailObfuscator.include" -->donde emailObfuscator.includecontiene lo siguiente:

<!-- // http://lists.evolt.org/archive/Week-of-Mon-20040202/154813.html -->
<script type="text/javascript">
    function gen_mail_to_link(lhs,rhs,subject) {
        document.write("<a href=\"mailto");
        document.write(":" + lhs + "@");
        document.write(rhs + "?subject=" + subject + "\">" + lhs + "@" + rhs + "<\/a>");
    }
</script>

Para incluir una dirección, uso JavaScript:

<script type="text/javascript"> 
    gen_mail_to_link('john.doe','example.com','Feedback about your site...');
</script>
<noscript>
  <em>Email address protected by JavaScript. Activate JavaScript to see the email.</em>
</noscript>

Debido a que he recibido correos electrónicos a través de Gmail desde 2005, el spam no es un problema. Entonces, no puedo hablar de cuán efectivo es este método. Es posible que desee leer este estudio (aunque es antiguo) que produjo este gráfico:

ingrese la descripción de la imagen aquí


¿Por qué necesita incluir del lado del servidor emailObfuscator.include? ¿No sería lo mismo que escribirlo en .html simple? (¿quizás es solo un ejemplo?) Además, ¿por qué usa comentarios html <!-- -->dentro del script? Y finalmente, ¿por qué una de sus <script>etiquetas está en minúsculas mientras que otras son mayúsculas <SCRIPT>? ¿Estos métodos ayudan a confundir a los bots o algo así?
Templario

@Templar El SSI no es necesario, ni confunde a los bots hasta donde yo sé. Hace (hecho) mi sitio modular (realmente ya no uso este método). El comentario citaba la fuente de dónde encontré el hack (ahora un enlace roto). El cambio en el caso es solo una casualidad. Si confunde a los bots, mucho mejor, pero dudo que tenga algún efecto.
Fuhrmanator

44
Un estudio más reciente y completo que explora la misma idea: grall.name/posts/1/antiSpam-emailAddressObfuscation.html
Lucas Cimon

95

Trabajando con contenido y attr en CSS:

.cryptedmail:after {
  content: attr(data-name) "@" attr(data-domain) "." attr(data-tld); 
}
<a href="#" class="cryptedmail"
   data-name="info"
   data-domain="example"
   data-tld="org"
   onclick="window.location.href = 'mailto:' + this.dataset.name + '@' + this.dataset.domain + '.' + this.dataset.tld; return false;"></a>

Cuando javascript está deshabilitado, solo el evento click no funcionará, el correo electrónico todavía se muestra.

Otro enfoque interesante (al menos sin un evento de clic) sería utilizar la marca de derecha a izquierda para anular la dirección de escritura. más sobre esto: https://en.wikipedia.org/wiki/Right-to-left_mark


66
Esto necesita más aprobación.
heXer

No estoy seguro de por qué, pero aunque esta solución parece bastante impresionante, no puede activar mi cliente de correo electrónico. Aquí hay un violín para que pruebe con: jsfiddle.net/wd436tg3
Ricardo Zea

1
@RicardoZea ¿qué navegador usas? tu violín me funciona bien en Chrome, ie11, edge y firefox
cyptus

3
Increíble. Pero agregue un "; return false" al evento onclick. Esto evitará la adición fea de # a la URL del navegador (al cancelar el enlace href original)
T4NK3R

55
SIN EMBARGO - ¿No puedo copiar manualmente la dirección de correo (visible) (en Chrome, Firefox o Edge)?
T4NK3R

83

Echa un vistazo de esta manera , bastante inteligente y usando CSS.

CSS

span.reverse {
  unicode-bidi: bidi-override;
  direction: rtl;
}

HTML

<span class="reverse">moc.rehtrebttam@retsambew</span>

El CSS anterior anulará la dirección de lectura y presentará el texto al usuario en el orden correcto.

Espero eso ayude

Salud


54
Seguramente es gracioso. Pero desafortunadamente, no se puede hacer clic en él y no funcionará para copiar / pegar, mientras se descuida cualquier navegador que no sea CSS, como los lectores de braille.
Arjan el

Mhh bien, pero una vez que la gente que escribe rastreadores lo ve, se vuelve inútil.
Mau

66
Hacer coincidir la dirección de correo electrónico inversa con un RegEx es tan fácil como hacerlo sin invertir. El spam es un negocio de miles de millones de dólares y los spammers ni siquiera usan sus propios ciclos de CPU para raspar las pantallas. De hecho, ya han leído esta conversación y han ajustado sus métodos en consecuencia. Cualquier cosa legible por computadora será legible por los bots. Ya sea que se ejecute mediante CSS o JavaScript.
Jani Hyytiäinen

3
@ JaniHyytiäinen No estoy de acuerdo. El hecho de que no estén pagando por la CPU no significa que tengan recursos ilimitados. Si ejecutar un intérprete JS produce muy pocas direcciones por su costo, lo deshabilitarán.
o0 '.

1
@Lohoris: Google informa que el tiempo promedio de carga de la página es (2.45s) y el tamaño promedio de la página (320KB), le da una idea de cuánto análisis puede hacer. Mientras un hilo de descarga está haciendo las solicitudes, un hilo de análisis puede hacer el análisis. La mayoría de las descargas están esperando. Lo que le da al hilo dl la posibilidad de verificar los requisitos previos antes de decidir enviarlo al analizador. Por ejemplo, página de representación, indexOf ('@'), indexOf ('mailto:'), etc. El hilo de análisis recibiría solo + -200 caracteres alrededor de la coincidencia, lo que permitiría un análisis tan complejo que 'parecería' ser infinito en términos de poder de análisis.
Jani Hyytiäinen

52

Tengo una opinión completamente diferente sobre esto. Yo uso MailHide para esto.

MailHide es un sistema de Google mediante el cual el usuario debe completar una prueba reCAPTCHA para luego revelarles el correo electrónico.


15
Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden volverse inválidas si la página vinculada cambia.
showdev

55
Aunque generalmente estoy de acuerdo con este sentimiento, en este caso la respuesta es usar una herramienta específica. Si el enlace desaparece, eliminaré la respuesta.
tvanfosson

Gracias. Esto es genial. Estoy escribiendo algo como esto (revelar es el enlace): Enviarme un correo electrónico: revelar
chrs

66
Tenga en cuenta que Google desactivó MailHide a partir de Match 2018. Como siempre con los servicios "gratuitos" de Google: los ofrecen siempre que puedan beneficiarse de los datos que contienen y, una vez que obtienen lo que necesitan, lo abandonan. La compañía más poco confiable para ofrecer servicios gratuitos. Me mantendría alejado de los servicios de Google o de cualquier otra persona si necesita transmitir cualquier cosa que intente hacer.
masi

51

No fue mi idea originalmente, pero no puedo encontrar al autor:

<a href="mailto:coxntact@domainx.com"
    onmouseover="this.href=this.href.replace(/x/g,'');">link</a>

Agregue tantas x como desee. Funciona perfectamente para leer, copiar y pegar, y no puede ser leído por un bot.


2
¡Ordenado! ¿Pero qué hay de los usuarios móviles?
Bodzio

Los mouseovers también se activan cuando tocas un enlace. Debería funcionar bien.
Andrew Swift

44
Funciona siempre que su dirección no contenga ninguna x. :-p Pero, lo sé, solo usa una letra diferente.
Dan Henderson

1
Pero luego, si JavaScript está deshabilitado, le presentará a los usuarios una dirección inexistente que se recuperará perdiéndole un cliente / usuario.
Xeevis

34
Si JavaScript está deshabilitado, ninguno de mis sitios funciona en absoluto ;-)
Andrew Swift

16

Creo que el único método infalible que puede tener es crear una página de contacto que es un formulario que se envía a un script que se envía a su dirección de correo electrónico. De esa manera, su dirección nunca está expuesta al público en absoluto. Esto puede ser indeseable por alguna razón, pero creo que es una solución bastante buena. A menudo me molesta cuando me veo obligado a copiar / pegar la dirección de correo electrónico de alguien de su sitio a mi cliente de correo y enviarle un mensaje; Prefiero hacerlo a través de un formulario en su sitio. Además, este enfoque le permite recibir comentarios anónimos, etc. Solo asegúrese de proteger su formulario utilizando algún tipo de esquema anti-bot, como un captcha. Hay muchos de ellos discutidos aquí en SO.


66
El único problema con esto es que no tiene una copia del mensaje que envió a menos que se tome el tiempo de copiarlo y pegarlo en otro lugar. Personalmente no me importa copiar y pegar, sino cada uno lo suyo.
gvkv

66
En cuanto al remitente que no tiene una copia: para muchos tipos de formularios en la web, me encanta la opción de obtener una copia yo mismo. Sin embargo, a menudo una opción de este tipo permite un abuso para el envío de mensajes de forma anónima a casi todo el mundo ...
Arjan

12
Esto puede OCULTAR su dirección de correo electrónico, pero no detendrá el spam en absoluto, a menos que asegure su formulario con un script de validación de imagen captcha.
SimonDowdles

1
También puede resolver el problema de que el remitente no tenga una copia al incluir una opción para enviársela también.
steinybot

1
La opción "Enviar una copia a sí mismo" - convierte efectivamente el formulario en un canon de spam, con usted como remitente - ¡mala idea!
T4NK3R


10

Si tiene soporte para php, puede hacer algo como esto:

<img src="scriptname.php">

Y el scriptname.php:

<?php
header("Content-type: image/png");
// Your email address which will be shown in the image
$email    =    "you@yourdomain.com";
$length    =    (strlen($email)*8);
$im = @ImageCreate ($length, 20)
     or die ("Kann keinen neuen GD-Bild-Stream erzeugen");
$background_color = ImageColorAllocate ($im, 255, 255, 255); // White: 255,255,255
$text_color = ImageColorAllocate ($im, 55, 103, 122);
imagestring($im, 3,5,2,$email, $text_color);
imagepng ($im);
?>

1
en lugar de usar php, podrías crear físicamente la imagen. Y al igual que con la inversión de CSS, todavía tiene el problema de no poder hacer clic y no se puede copiar a menos que use un lápiz: P
Claudiu

9

Sé que mi respuesta no será del agrado de muchos, pero tenga en cuenta los puntos descritos aquí antes de rechazarla.

Cualquier cosa fácilmente legible por máquina será fácilmente legible por máquina por los spammers. A pesar de que sus acciones nos parecen estúpidas, no son personas estúpidas. Son innovadores e ingeniosos. No solo usan bots para recolectar correos electrónicos, tienen una gran cantidad de métodos a su disposición y, además de eso, simplemente pagan buenas listas nuevas de correos electrónicos. Lo que significa es que tienen miles de hackers de sombrero negro en todo el mundo para ejecutar sus trabajos. Gente lista para codificar malware que raspa las pantallas de los navegadores de otras personas, lo que eventualmente hace que cualquier método que intentes lograr sea inútil. Este hilo ya ha sido leído por más de 10 personas y se están riendo de nosotros. Algunos de ellos incluso pueden aburrirse hasta las lágrimas para descubrir que no podemos presentarles un nuevo desafío.

Tenga en cuenta que eventualmente no está tratando de ahorrar su tiempo, sino el tiempo de los demás. Debido a esto, considere pasar más tiempo aquí. No hay una bala mágica fácil de ejecutar que funcione. Si trabaja en una empresa que publica correos electrónicos de 100 personas en el sitio y puede reducir 1 correo no deseado por día por persona, estamos hablando de 36500 correos electrónicos no deseados al año. Si eliminar dicho correo electrónico tarda 5 segundos en promedio, estamos hablando de 50 horas de trabajo al año. Sin mencionar la cantidad reducida de molestia. Entonces, ¿por qué no pasar unas horas en esto?

No solo usted y las personas que reciben el correo electrónico consideran el tiempo como un activo. Por lo tanto, debe encontrar una manera de ofuscar las direcciones de correo electrónico de tal manera que no valga la pena descifrarlas. Si utiliza algún método ampliamente utilizado para ofuscar los correos electrónicos, realmente vale la pena descifrarlos. Como resultado, el cracker tendrá en sus manos miles, si no decenas o cientos de miles de correos electrónicos nuevos. Y para ellos obtendrán dinero.

Entonces, adelante y codifique su propio método. Este es un caso raro en el que reinventar la rueda realmente vale la pena. Utilice un método que no sea legible por máquina y que preferiblemente requiera cierta interacción del usuario sin sacrificar la experiencia del usuario.

Pasé unos 20 minutos para descifrar un ejemplo de lo que quiero decir. En el ejemplo, usé KnockoutJS simplemente porque me gusta y sé que probablemente no lo usarás tú mismo. Pero es irrelevante de todos modos. Es una solución personalizada que no se usa ampliamente. Romperlo no representará una recompensa por hacerlo, ya que el método de hacerlo solo funcionaría en una sola página en Internet.

Aquí está el violín: http://jsfiddle.net/hzaw6/

El siguiente código no pretende ser un ejemplo de buen código. Pero solo una muestra rápida de código que es muy difícil de comprender para la máquina, incluso manejamos correos electrónicos aquí. E incluso si se pudiera hacer, no valdrá la pena ejecutarlo a gran escala.

Y sí, sé que no funciona en IE = lte8 debido a 'No se pueden obtener atributos de propiedad' de referencia indefinida o nula ', pero simplemente no me importa porque es solo una demostración del método, no una implementación real, y no está destinado a ser utilizado en la producción tal como es. Siéntase libre de codificar el suyo, que es más fresco, técnicamente más sólido, etc.

Ah, y nunca jamás nombre algo correo o correo electrónico en html o javascript. Es demasiado fácil raspar el DOM y el objeto de ventana para cualquier cosa llamada correo o correo electrónico y verificar si contiene algo que coincida con un correo electrónico. Esta es la razón por la que no desea ninguna variable que contenga correo electrónico en su forma completa y también es la razón por la que desea que el usuario interactúe con la página antes de asignar dichas variables. Si su modelo de objeto javascript contiene direcciones de correo electrónico en estado preparado para DOM, las está exponiendo a los spammers.

El HTML:

<div data-bind="foreach: contacts">
    <div class="contact">
        <div>
            <h5 data-bind="text: firstName + ' ' + lastName + ' / ' + department"></h5>
            <ul>
                <li>Phone: <span data-bind="text: phone"></span></li>
                <li><a href="#999" data-bind="click:$root.reveal">E-mail</a> <span data-bind="visible: $root.msgMeToThis() != ''"><input class="merged" data-bind="value: mPrefix" readonly="readonly" /><span data-bind="text: '@' + domain"></span></span></li>
            </ul>
        </div>
    </div>
</div>

El JS

function ViewModel(){
    var self = this;

    self.contacts = ko.observableArray([
        { firstName:'John', mPrefix: 'john.doe', domain: 'domain.com', lastName: 'Doe', department: 'Sales', phone: '+358 12 345 6789' },
        { firstName:'Joe', mPrefix: 'joe.w', domain: 'wonder.com', lastName: 'Wonder', department: 'Time wasting', phone: '+358 98 765 4321' },
        { firstName:'Mike', mPrefix: 'yo', domain: 'rappin.com', lastName: 'Rophone', department: 'Audio', phone: '+358 11 222 3333' }
    ]);
    self.msgMeToThis = ko.observable('');
    self.reveal = function(m, e){
        var name = e.target.attributes.href.value;
        name = name.replace('#', '');
        self.msgMeToThis(name);
    };
}
var viewModel = new ViewModel();
ko.applyBindings(viewModel);

8

Uno de mis métodos favoritos es ofuscar la dirección de correo electrónico usando php, un ejemplo clásico es convertir los caracteres a valores HEX de esta manera:

function myobfiscate($emailaddress){
 $email= $emailaddress;                
 $length = strlen($email);                         
 for ($i = 0; $i < $length; $i++){                
 $obfuscatedEmail .= "&#" . ord($email[$i]).";";
 }
 echo $obfuscatedEmail;
}

Y luego, en mi marcado, simplemente lo llamaré de la siguiente manera:

  <a href="mailto:<?php echo myobfiscate('someone@somewhere.com'); ?>"
title="Email me!"><?php echo myobfiscate('someone@somewhere.com');?> </a>

Luego examine su fuente, ¡se sorprenderá gratamente!


Ese es un buen ejemplo. Gracias. ¿Alguna pista sobre SpamBots usando decodificación HEX?
jasonflaherty

7

Puede intentar ocultar caracteres usando entidades html en hexa (por ejemplo: & # x40 para @). Esta es una solución conveniente, ya que un navegador correcto la traducirá y puede tener un enlace normal. El inconveniente es que un bot puede traducirlo teóricamente, pero es un poco inusual. Lo uso para proteger mi correo electrónico en mi blog.

Otra solución es usar javascript para ensamblar parte de la dirección y decodificar sobre la marcha la dirección. El inconveniente es que un navegador con JavaScript deshabilitado no mostrará su dirección.

La solución más efectiva es usar una imagen , pero es difícil para el usuario tener que copiar la dirección a mano.

Su solución es bastante buena , ya que solo agrega un inconveniente (escribiendo manualmente la @) solo para usuarios que tienen JavaScript deshabilitado. También puede estar más seguro con:

onclick="this.href='mailto:' + 'admin' + '&#x40;' + 'domain.com'"

5

Spambots no interpretará esto, porque es un método menos conocido :)

Primero, defina el css:

email:before {
    content: "admin";
}

email:after {
    content: "@example.com";
}

Ahora, donde quiera mostrar su correo electrónico, simplemente inserte el siguiente HTML:

<div id="email"></div>

Y tada!


Esto funciona, pero no admite copiar y pegar, lo que puede afectar la usabilidad para la mayoría de los usuarios
Iruku Kagika

4

Utilizo una combinación muy simple de CSS y jQuery que muestra la dirección de correo electrónico correctamente al usuario y también funciona cuando se hace clic o se desplaza el ancla:

HTML:

<a href="mailto:me@example.spam" id="lnkMail">moc.elpmaxe@em</a>

CSS:

#lnkMail {
    unicode-bidi: bidi-override;
    direction: rtl;
}

jQuery:

$('#lnkMail').hover(function(){
    // here you can use whatever replace you want
    var newHref = $(this).attr('href').replace('spam', 'com');
    $(this).attr('href', newHref);
});

Aquí hay un ejemplo de trabajo.


¿mostrará el valor correcto de href en la barra de estado del navegador cuando se pasa el enlace?
Nik O'Lai

Sí, muestra el valor correcto de href cuando el enlace está suspendido. Es por eso que el método jQuery .hover necesita ser implementado.
Sergiu

Desafortunadamente, no, no muestra el valor correcto de href, al menos, cuando pasa el mouse sobre el enlace la primera vez (es me@example.spam). En el segundo vuelo, todo estaba bien. Pruébalo con tu propio enlace.
Nik O'Lai

1
Está funcionando en Chrome e IE. Parece que solo en Firefox, en el primer desplazamiento, la barra de estado no se actualiza. Intentaré encontrar una solución para Firefox.
Sergiu

1
Ya veo, ya veo, en realidad me gusta este.
Eric Bishard

3

! - Agregando esto como referencia, no sé qué tan desactualizada podría estar la información, pero informa sobre algunas soluciones simples que no requieren el uso de ningún script

Después de buscar esto, encontré esta página pero también estas páginas:

http://nadeausoftware.com/articles/2007/05/stop_spammer_email_harvesters_obfuscating_email_addresses

intente invertir la dirección de correo electrónico

Ejemplo HTML simple:

<bdo dir="rtl">moc.elpmaxe@nosrep</bdo>
Result : person@example.com

El mismo efecto usando CSS

CSS:
.reverse { unicode-bidi:bidi-override; direction:rtl; }
HTML:
<span class="reverse">moc.elpmaxe@nosrep</span>
Result : person@example.com

Combinar esto con cualquiera de los métodos mencionados anteriormente puede incluso hacerlo más efectivo


3

Una solución fácil es usar entidades HTML en lugar de caracteres reales. Por ejemplo, el "me@ejemplo.com" se convertirá en:

<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#101;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;">email me</A>

2
Pruebe google.se/search?q=HTML+entities+converter que debería mantenerlo ocupado;)
grapefrukt

1
Google puede encontrar muchas páginas para eso. Un ejemplo: hp.vector.co.jp/authors/VA022023/javascript/…
Romain Linsolas

44
Pero, ¿no podría un bot regexizarlo con la misma facilidad?
gigantesco

20
Ouch, el ejemplo me @ stack ... debería escribirse mejor como me@example.com, me@example.net o me@example.org: ¡esos son los únicos nombres de dominio que los no propietarios deberían usar en los ejemplos!
Arjan

44
No es tan efectivo, según techblog.tilllate.com/2008/07/20/…
Fuhrmanator

3

Aquí está mi versión de trabajo:


Cree en algún lugar un contenedor con un texto alternativo:

<div id="knock_knock">Activate JavaScript, please.</div>

Y agregue en la parte inferior del DOM (wrt el renderizado) el siguiente fragmento:

<script>
  (function(d,id,lhs,rhs){
    d.getElementById(id).innerHTML = "<a rel=\"nofollow\" href=\"mailto"+":"+lhs+"@"+rhs+"\">"+"Mail"+"<\/a>";
  })(window.document, "knock_knock", "your.name", "example.com");
</script>

Agrega el hipervínculo generado al contenedor especificado:

<div id="knock_knock"><a rel="nofollow" href="your.name@example.com">Mail</a></div>

Además aquí hay una versión minificada:

<script>(function(d,i,l,r){d.getElementById(i).innerHTML="<a rel=\"nofollow\" href=\"mailto"+":"+l+"@"+r+"\">"+"Mail"+"<\/a>";})(window.document,"knock_knock","your.name","example.com");</script>

2

El mejor método para ocultar las direcciones de correo electrónico solo es bueno hasta que el programador del bot descubra esta "codificación" e implemente un algoritmo de descifrado.

La opción de JavaScript no funcionará mucho, porque hay muchos rastreadores que interpretan JavaScript.

No hay respuesta, en mi humilde opinión.


¿Hay rastreadores que interpretan JavaScript? Mi único método de codificación de JavaScript me ha funcionado bien en los últimos años: mi tasa de spam ha sido bastante estable ~ 4 / semana, por lo que no me he preocupado por las direcciones de otras personas que confié a este método. ¿Debería?
Kev

Seguramente, puede excluir muchos rastreadores, pero yo, si creara un rastreador de direcciones, implementaría una lib de JavaScript :)
guerda

más esfuerzo de lo que parece
cobarde anónimo

Google está rastreando algunos JS ahora.
Alister Bulman

2

Probablemente hay bots que reconocen el [at]y otros disfraces como @símbolo. Entonces este no es un método realmente efectivo.

Claro que podría usar algunas codificaciones como codificación URL o referencias de caracteres HTML (o ambas):

// PHP example
// encodes every character using URL encoding (%hh)
function foo($str) {
    $retVal = '';
    $length = strlen($str);
    for ($i=0; $i<$length; $i++) $retVal.=sprintf('%%%X', ord($str[$i]));
    return $retVal;
}
// encodes every character into HTML character references (&#xhh;)
function bar($str) {
    $retVal = '';
    $length = strlen($str);
    for ($i=0; $i<$length; $i++) $retVal.=sprintf('&#x%X;', ord($str[$i]));
    return $retVal;
}

$email = 'user@example.com';
echo '<a href="'.bar('mailto:?to=' . foo(','.$email.'')).'">mail me</a>';

// output
// <a href="&#x6D;&#x61;&#x69;&#x6C;&#x74;&#x6F;&#x3A;&#x3F;&#x74;&#x6F;&#x3D;&#x25;&#x32;&#x43;&#x25;&#x37;&#x35;&#x25;&#x37;&#x33;&#x25;&#x36;&#x35;&#x25;&#x37;&#x32;&#x25;&#x34;&#x30;&#x25;&#x36;&#x35;&#x25;&#x37;&#x38;&#x25;&#x36;&#x31;&#x25;&#x36;&#x44;&#x25;&#x37;&#x30;&#x25;&#x36;&#x43;&#x25;&#x36;&#x35;&#x25;&#x32;&#x45;&#x25;&#x36;&#x33;&#x25;&#x36;&#x46;&#x25;&#x36;&#x44;">mail me</a>

Pero como es legal usarlos, cada navegador / cliente de correo electrónico también debe manejar estas codificaciones.


Totalmente de acuerdo, los spammers son personas "inteligentes", después de años de personas agregando [en] o [punto] en lugar de la sintaxis, por supuesto que van a tener algoritmos que recogen estos patrones.
SimonDowdles

¿Qué pasa con la decodificación de estos valores HEX?
jasonflaherty

2

Soy fanático de SpamSpan : está ofuscado, pero aún puede descifrarse si JS está desactivado. Parece que también funciona, aunque solo lo he estado usando durante aproximadamente un año en un sitio web de bajo tráfico.

También hay un módulo para que Drupal convierta automáticamente los correos electrónicos en SpamSpans, si lo necesita.


1

¿Funciona si hago clic derecho en el enlace y elijo "copiar URL"? Si no es así, no es una situación ideal (rara vez hago clic en un enlace mailto, prefiero copiar la dirección de correo electrónico y pegarla en mi aplicación de correo o donde sea que la necesite en un momento específico).

Solía ​​ser bastante paranoico protegiendo mi dirección de correo electrónico en línea (UseNet, web y similares), pero en estos días sospecho que en realidad se generan más "posibles objetivos para el correo no deseado" haciendo coincidir las partes locales con los dominios mediante programación. Baso esto en, en ocasiones, haber revisado los registros de mi servidor de correo. Tiende a haber bastantes intentos de entrega a direcciones no existentes (incluidas versiones truncadas de cebo de spam que colgué en UseNet a fines de los años 90, cuando el raspado de direcciones era muy frecuente).


1

Después de usar tantas técnicas, encontré una manera fácil y muy amigable, los bots buscan @ Símbolo y recientemente buscan [en] su variación, así que uso 2 técnicas

  1. escribo mi correo electrónico en una imagen como la que usan los domaintolls y funciona perfectamente o
  2. para reemplazar el Símbolo (@) con una imagen de él como

@ reemplazar y la imagen alt será alt = "@" para que el bot encuentre una imagen y cualquier humano la vea como una dirección normal, así que si la copia, copiará el correo electrónico y el trabajo será don, por lo que el código será

<p>myname<img src="http://www.traidnt.net/vb/images/mail2.gif" width="11" height="9" alt="@" />domain.com</p>


1

Primero, me aseguraría de que la dirección de correo electrónico solo se muestre cuando tenga habilitado JavaScript. De esta manera, no hay texto sin formato que se pueda leer sin javascript.

En segundo lugar, una forma de implementar una función segura es mantenerse alejado de la <button>etiqueta. Esta etiqueta necesita una inserción de texto entre las etiquetas, lo que la hace legible por computadora. En su lugar, intente<input type="button"> con un controlador de JavaScript para un onClick. Luego, use todas las técnicas mencionadas por otros para implementar una notación de correo electrónico segura.

Otra opción es tener un botón con "Haga clic para ver la dirección de correo electrónico". Una vez que se hace clic, esto se convierte en un correo electrónico codificado (los caracteres en los códigos HTML). En otro clic, esto redirige a la función 'mailto: email'

Una versión sin codificar de la última idea, con direcciones de correo electrónico seleccionables y no seleccionables:

<html>
<body>
<script type="text/javascript">
      e1="@domain";
      e2="me";
      e3=".extension";
email_link="mailto:"+e2+e1+e3;
</script>
<input type="text" onClick="this.onClick=window.open(email_link);" value="Click for mail"/>
<input type="text" onClick="this.value=email;" value="Click for mail-address"/>
<input type="button" onClick="this.onClick=window.open(email_link);" value="Click for mail"/>
<input type="button" onClick="this.value=email;" value="Click for mail-address"/>
</body></html>

Vea si esto es algo que desearía y combínelo con las ideas de otros. Nunca puedes estar muy seguro.


2
oh mira - me@dominio.extensión - ahí está la dirección de correo electrónico de texto plano.
Alister Bulman

1

Y mi funcion. Lo he creado mirando las respuestas colocadas en este tema.

 function antiboteEmail($email)
 {
        $html = '';

        $email = strrev($email);
        $randId = rand(1, 500);

        $html .= '<span id="addr-'.$randId.'" class="addr">[turn javascript on to see the e-mail]</span>';
        $html .= <<<EOD
                <script>
                $(document).ready(function(){

                    var addr = "$email";
                    addr = addr.split("").reverse().join("");
                    $("#addr-$randId").html("<a href=\"mailto:" + addr + "\">" + addr + " </a>");
                });
                </script>
EOD;

        return $html;
    }

Utiliza dos métodos: directorio de derecha a izquierda y colocación de JavaScript.


1

Opción 1: dividir la dirección de correo electrónico en varias partes y crear una matriz en JavaScript a partir de estas partes. A continuación, una estas partes en el orden correcto y use la propiedad .innerHTML para agregar la dirección de correo electrónico a la página web.

 <span id="email">  </span>   // blank tag

 <script>
 var parts = ["info", "XXXXabc", "com", "&#46;", "&#64;"];
 var email = parts[0] + parts[4] + parts[1] + parts[3] + parts[2];
 document.getElementById("email").innerHTML=email; 
 </script>

Opción 2: usar imagen en lugar de texto de correo electrónico

Sitio web del creador de imagen a partir del texto: http://www.chxo.com/labelgen/

Opción 3: podemos usar AT en lugar de "@" y DOT en lugar de "."

es decir:

 info(AT)XXXabc(DOT)com 

1
Creo que la opción 1 no es una buena opción. Un analizador que se ejecuta junto a un bot podría calcular fácilmente el valor del innerHTML, y la opción 3 probablemente tampoco sea tan buena porque un bot inteligente podría resolverlo. Creo que la opción 2 es la mejor.
John Sonderson

1

No me gusta que se mezclen JavaScript y HTML, por eso uso esta solución. Funciona bien para mí, por ahora.

Idea : podría hacerlo más complicado proporcionando información cifrada en los dataatributos y descifrarla dentro del JS. Esto se hace simplemente reemplazando letras o simplemente invirtiéndolas.

HTML :

<span class="generate-email" data-part1="john" data-part2="gmail" data-part3="com">placeholder</span>

JS :

$(function() {
    $('.generate-email').each(function() {
        var that = $(this);
        that.html(
            that.data('part1') + '@' + that.data('part2') + '.' + that.data('part3')
        );
    });  
});

Pruébalo: http://jsfiddle.net/x6g9L817/


1

¿Qué pasa con HTML_CHARACTER ?:

joe&#064;mail.com

salidas

joe@mail.com

1
No se puede hacer clic en la dirección de correo electrónico de esta manera y la ubicación del símbolo @ no será a prueba de balas, ya que no siempre se verá igual que si se colocara en línea.
Brent O'Connor

0

Aquí hay una solución jquery simple para este problema:

<script type="text/javascript">
$(document).ready(function() {
    str1="mailto:";
    str2="info";
    str3="@test.com";
    $("#email_a").attr("href", str1+str2+str3);

});
</script>

<a href="#" id="email_a"><img src="sample.png"/></a>

0

Me gusta más la respuesta de ofaurax, pero modificaría esto para un correo electrónico un poco más oculto:

onclick="p1='admin'; p2='domain.com'; this.href='mailto:' + p1 + '& #x40;' + p2"

0

Solo tengo que dar otra respuesta. Se me ocurrió algo divertido para jugar.

Descubrí que en muchas tablas de caracteres comunes, las letras @ y az reaparecen más de una vez. Puede asignar los caracteres originales a las nuevas asignaciones y hacer que sea más difícil para los robots de spam descubrir qué es el correo electrónico.

Si recorre la cadena y obtiene el código de caracteres de una letra, luego agregue 65248 y cree una entidad html basada en el número, obtendrá una dirección de correo electrónico legible para humanos.

var str = 'john.doe@email.com';
str = str.toLowerCase().replace(/[\.@a-z]/gi, function(match, position, str){
    var num = str.charCodeAt(position);
    return ('&#' + (num + 65248) + ';');
});

Aquí hay un violín que funciona: http://jsfiddle.net/EhtSC/8/

Puede mejorar este enfoque creando un conjunto más completo de asignaciones entre caracteres que se vean iguales. Pero si copia / pega el correo electrónico en el bloc de notas, por ejemplo, obtendrá muchos cuadros.

Para superar algunos de los problemas de la experiencia del usuario, creé el correo electrónico como enlace. Cuando haces clic en él, vuelve a asignar los personajes a sus originales.

Para mejorar esto, puede crear asignaciones de caracteres más complejas si lo desea. Si puede encontrar varios caracteres que se pueden usar, por ejemplo, en lugar de 'a', ¿por qué no asignarlos al azar?

Probablemente no sea el enfoque más seguro, pero me divertí mucho jugando con él: D

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.