La meilleure façon d'obscurcir une adresse e-mail sur un site web?

j'ai passé les derniers jours à travailler sur la mise à jour de mon site web personnel. L'URL de mon site (mon prénom).(mon nom de famille).com, comme mon nom de famille est plutôt inhabituel, et j'ai eu la chance de ramasser le nom de domaine. Mon adresse e-mail est (mon prénom)@(mon nom de famille).com. Alors, vraiment, quand il s'agit de deviner, ce n'est pas très dur.

de toute façon, je veux intégrer un lien mailto: dans mon site web, afin que les gens puissent me contacter. Et, malgré mon l'adresse e-mail n'étant pas très difficile à deviner, je préfère ne pas l'avoir récolté par les robots spam qui rampent juste les sites Web pour les modèles d'adresse e-mail et les ajouter à leur base de données.

Quelle est la meilleure façon pour moi d'obscurcir mon adresse e-mail, de préférence sous forme de lien? Les méthodes que je connais sont:

<a href="mailto:x@y.com">e-mail me</a>

ça marche, mais ça veut aussi dire que dès que mon site va sur Google, je vais patauger dans le spam car les robots spam vont facilement repérer mon e-mail adresse.

<img src="images/e-mail.png" />

c'est moins souhaitable, parce que non seulement les visiteurs seront incapables de cliquer dessus pour m'envoyer un e-mail, mais les robots spam plus intelligents seront probablement en mesure de détecter les caractères que l'image contient.

je sais qu'il n'y a probablement pas de solution parfaite, mais je me demandais juste ce que tout le monde pensait être le mieux. Je suis certainement prêt à utiliser JavaScript si nécessaire, car mon site Web en utilise déjà des tonnes.

118
demandé sur AstroCB 2009-04-14 22:24:48

25 réponses

j'encode les caractères comme des entités HTML ( quelque chose comme ceci ). Il n'est pas nécessaire que JS soit activé et semble avoir arrêté la plupart des spams. Je suppose qu'un robot intelligent peut encore la récolter, mais je n'ai eu aucun problème.

88
répondu chroder 2009-04-14 18:29:01

Personnellement, j'ai renoncé à cacher mon adresse e-mail. Je trouve qu'il est plus facile de trouver de meilleures solutions pour filtrer les spams que de s'inquiéter de brouiller les pistes. Vous pourriez passer des jours à essayer de trouver le meilleur moyen d'obscurcir votre adresse, et puis tout ce qu'il faut est une personne pour vendre votre adresse à un spammer et tout ce travail était inutile.

78
répondu Chad Birch 2009-04-14 18:29:38

la solution actuellement acceptée est de créer un formulaire de contact qui permet aux utilisateurs de vous envoyer un courriel. Si vous recevez beaucoup de spam à partir de cela (je ne suis pas sur mon site), alors vous pouvez ajouter un captcha pour une bonne mesure, et vous serez loin du "bas fruit suspendu" à ce point.

Le fait de la question est que si vous fournissez un lien sur lequel l'utilisateur peut cliquer pour ouvrir leur client de messagerie avec votre adresse dans le champ a:, puis l'ordinateur est en mesure de déchiffrer l'e-mail adresse de la page et ainsi peut un robot de spam.

65
répondu JoshJordan 2009-04-14 18:28:32

reCAPTCHA offre un simple email obfuscation service . Vous n'avez pas besoin de créer un compte et vous pouvez commencer à l'utiliser immédiatement. Vous pouvez utiliser le service comme lien ou comme popup.

après que le captcha est résolu, votre adresse e-mail apparaît comme un href/mailto, de sorte qu'il peut être cliqué/suivi par les utilisateurs qui ont configuré leurs clients e-mail pour travailler avec leurs navigateurs.

38
répondu Rich Apodaca 2015-09-01 15:54:13

vous avez mentionné ceci est pour votre site web personnel. Sur mon site personnel (par exemple, bobsomers.com) je viens d'avoir un paragraphe qui dit ceci:

La meilleure façon d'entrer en contact avec moi avant que le nouveau site est up est d'envoyer moi un e-mail. Mon adresse email est mon premier nom à ce site web. Si vous Je n'arrive pas à comprendre à partir de cet indice, eh bien, vous pourriez trouver des e-mails plus d'un défi de trouver mon adresse.

les gens semblent être en mesure de comprendre que très bien, comme je reçois des e-mails légitimes tout le temps. Parfois, les meilleures solutions ne nécessitent pas d'écrire de code. :)

35
répondu Bob Somers 2009-04-15 01:56:02

apparemment en utilisant CSS pour changer la direction de votre texte fonctionne assez bien. Ce lien a un test d'un tas d'autres méthodes d'obfuscation.

Tout ce que vous utilisez sera inévitablement vaincu. Votre principal objectif devrait être d'éviter d'agacer le diable hors de vos utilisateurs.

14
répondu Brian Carper 2009-04-14 18:34:33

n'utilisez pas de techniques d'obscurcissement ici parce que c'est probablement le premier endroit où les moissonneurs d'e-mails chercheront à savoir comment les gens sont des e-mails obscurcissants. Si vous devez avoir votre adresse e-mail visible sur le site ne copiez pas mot à mot la méthode de quelqu'un d'autre; obscurcissez-la d'une manière unique qu'aucun autre site n'a utilisé de sorte que votre méthode ne sera pas connu des pêcheurs avant qu'ils ne visitent votre site.

11
répondu Sam Hasler 2009-04-14 21:53:50

une manière légère d'obscurcir le href d'une ancre est de base64-l'encoder:

> btoa('mailto:email@example.com')
< "bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t"

et ensuite inclure en dur:

<a href="javascript:window.location.href=atob('bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t')">E-Mail</a>

ou côté serveur dynamique p.ex. en PHP:

<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:email@example.com") ?>')">E-Mail</a>

en combinaison avec la réversion de chaîne de caractères, il pourrait être assez spam-save:

<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:email@example.com") ?>')" style="unicode-bidi: bidi-override; direction: rtl;"><?= strrev("email@example.com") ?></a>
11
répondu Fabio Poloni 2016-09-13 08:45:06

vous pouvez faire comme Google sur Google Code (et groupes). Afficher un par tof de l'email, et une partie cliquable ("..."). Si vous cliquez sur ce bouton, cela signifie que vous voulez connaître le courriel et qu'on vous demande de remplir un captcha. Après l'email (et d'autres?) sont visibles que par vous.

8
répondu Ross 2009-04-15 10:45:55

un site Web que je maintiens utilise un JavaScript un peu simpliste moyen de (espérons) garder spambots.

les liens de courriel appellent une fonction JS:

function sendEmail(name, domain) {
    location.href = 'mailto:' + name + '@' + domain;
}

Pour s'assurer que seuls les utilisateurs qui ont JS activés peuvent voir le lien, écrire ceci:

function writeEmailLink(realName, name, domain) {
    document.write('<a href="javascript:sendEmail(\''
      + name + '\', \'' + domain + '\')">');
    document.write(realName);
    document.write('</a>');
}   

l'utilisation d'une fonction JS pour écrire un lien qui en appelle un autre signifie qu'il y a deux couches de protection.

6
répondu Stewart 2009-04-14 22:17:22

j'utilise L'obfuscation JavaScript, jetez un oeil à celui-ci par exemple:

http://www.jottings.com/obfuscator /

5
répondu Codebrain 2009-04-14 18:26:47

la mienne est en fait simple:

<h3 id="email">hello@gmail.com</h3><!-- add a fake email -->


    $(document).ready(function(){
//my email in reverse :)
            var s = 'moc.elibomajninbew@htiek';
            var e = s.split("").reverse().join("");
            $('#email').html('<a href="mailto:'+e+'">'+e+'</a>');
    });
5
répondu keithics 2014-02-20 11:01:40

comme une affiche ci-dessus dit, j'utilise aussi l'obfuscation JavaScript du site jottings .

la page Web génère du JavaScript qui peut être amélioré. La chaîne de texte mailto: est dans le clair et identifiable par les robots (qui pourraient le repérer et désamorcer cette chaîne), mais si on entre dans le jottings.com page Web une adresse e-mail du formulaire mailto:addr@site.tld au lieu de addr@site.tld et supprime ensuite le texte mailto: à partir du JavaScript qui est généré, on a soudainement un certain JavaScript qui ne semble pas avoir quoi que ce soit à voir avec le courrier électronique du tout - juste JavaScript aléatoire dont le web est plein. On peut encore améliorer cela en se débarrassant du texte du lien - j'ai remplacé le mien par une image de mon adresse e-mail qui est dans une police assez obscure. Puis juste au cas où cette méthode sur jottings.com devient populaire, j'ai aléatoire les noms de variables dans la sortie JavaScript pour rendre difficile pour un robot pour repérer une instance de jottings généré code JavaScript.

de toute évidence, certaines de ces améliorations pourraient être intégrées dans le mécanisme sur les jottings lui-même, et puisque le code est disponible ouvertement, ce serait relativement facile.

un exemple peut rendre cela un peu plus clair. J'ai utilisé le jottings Obfuscator au lien ci-dessus pour obscurcir mailto:foo@bar.com (notez que je triche sur l'intention originale du site jottings en entrant la chaîne mailto:foo@bar.com au lieu de foo@bar.com ) avec le texte "Envoyer moi Email", qui jottings transformé en ce Javascript:

<script type="text/javascript" language="javascript">
<!--
// Email obfuscator script 2.1 by Tim Williams, University of Arizona
// Random encryption key feature by Andrew Moulden, Site Engineering Ltd
// This code is freeware provided these four comment lines remain intact
// A wizard to generate this code is at http://www.jottings.com/obfuscator/
{ coded = "3A1OTJ:rJJ@VAK.GJ3"
  key = "J0K94NR2SXLupIGqVwt8EZlhznemfaPjs7QvTB6iOyWYo3rAk5FHMdxCg1cDbU"
  shift=coded.length
  link=""
  for (i=0; i<coded.length; i++) {
    if (key.indexOf(coded.charAt(i))==-1) {
      ltr = coded.charAt(i)
      link += (ltr)
    }
    else { 
      ltr = (key.indexOf(coded.charAt(i))-shift+key.length) % key.length
      link += (key.charAt(ltr))
    }
  }
document.write("<a href='mailto:"+link+"'>Send Me Email</a>")
}
//-->
</script><noscript>Sorry, you need Javascript on to email me.</noscript>

après avoir récupéré ça, je le colle dans un éditeur et:

  1. supprimer le mailto:
  2. remplacer texte de lien avec pointeur vers une image de mon adresse e-mail
  3. renommer toutes les variables
  4. remplacer la section "noscript" par un autre lien à l'image de l'adresse e-mail

je me retrouve avec ceci:

<script type="text/javascript" language="javascript">
<!--
// Email obfuscator script 2.1 by Tim Williams, University of Arizona
// Random encryption kkeoy feature by Andrew Moulden, Site Engineering Ltd
// This kudzu is freeware provided these four comment lines remain intact
// A wizard to generate this kudzu is at http://www.jottings.com/obfuscator/
{ kudzu = "3A1OTJ:rJJ@VAK.GJ3"
  kkeoy = "J0K94NR2SXLupIGqVwt8EZlhznemfaPjs7QvTB6iOyWYo3rAk5FHMdxCg1cDbU"
  shift=kudzu.length
  klonk=""
  for (variter=0; variter<kudzu.length; variter++) {
    if (kkeoy.indexOf(kudzu.charAt(variter))==-1) {
      lutu = kudzu.charAt(variter)
      klonk += (lutu)
    }
    else {
      lutu = (kkeoy.indexOf(kudzu.charAt(variter))-shift+kkeoy.length) % kkeoy.length
      klonk += (kkeoy.charAt(lutu))
    }
  }
document.write("<a href='"+klonk+"'><img src='contactaddressimage.png' alt='Send Me Email' border='0' height='62' width='240'></a>")
}
//-->
</script>
<noscript>
    <img src="contactaddressimage.png" border="0" height="62" width="240">
    <font face="Arial" size="3"><br>&nbsp;</font></p>
</noscript>
4
répondu Al Whaley 2015-07-30 11:41:09

Je ne vois pas comment ça pourrait marcher. Ne pourriez-vous pas laisser votre adresse e-mail et la charger en utilisant un appel AJAX une fois que la page a terminé le chargement. Pas sûr si les robots spam peuvent récupérer le HTML modifié ou s'ils sont assez intelligents pour écouter sur D'autres trafics HTTP pour essayer de récupérer des adresses e-mail ou s'ils balaient juste la page telle qu'elle est reçue la première fois.

3
répondu uriDium 2009-04-14 20:13:10

un gars a testé neuf différentes façons de présenter une adresse e-mail sur une page et puis résultats publiés sur son blog.

ses trois meilleurs chemins étaient:

  1. changer la direction du code avec CSS
  2. utilisant l'affichage CSS: aucun
  3. ROT13 Encryption

mise en garde -- ceci a été posté il y a deux ans. Les robots Spam sont peut-être devenus plus intelligents.

2
répondu Doug Harris 2010-08-03 19:38:21

une autre approche pourrait consister à utiliser un cadre JavaScript et à lier les données/le modèle aux éléments HTML. Dans le cas D'AngularJS, les éléments HTML seraient écrits comme:

<a href="mailto:{{contactEmail}}"><span>{{contactEmail}}</span></a>

l'interpolation {{data}} de liaison utilise une variable de portée qui contient la valeur réelle de courrier électronique. En outre, un filtre pourrait également être utilisé qui gère le décodage du courriel comme suit:

<a href="mailto:{{contactEmail | decode}}"><span>{{contactEmail | decode}}</span></a>

les avantages sont dans la façon dont le HTML est écrire. L'inconvénient est qu'il nécessite un support de script qui peut être un non.

juste une autre approche.

1
répondu ozkary 2016-01-28 17:12:37

L'appel Ajax solution

le mieux est d'avoir un formulaire sur le site web et de ne pas afficher l'adresse e-mail, parce que tous les robots sont plus intelligents jour après jour, mais si vous avez besoin d'afficher l'adresse e-mail sur le site web, donc, vous pouvez le faire avec ajax appel sur votre serveur, et de le montrer sur clic.

HTML

<a class="obfmail" href="#" rel="info">click here to show email address</a>

ou

<a class="obfmail" href="#" rel="info">
    <img src="img/click-to-show-email.jpg">
</a>

jQuery

$(document).one'click', '.obfmail', function(e) {
    e.preventDefault();
    a = $(this);
    addr = a.attr('rel');
    $.ajax({
        data: { 
            email: addr
        },
        url : "/a/getemail",
        type: "POST",
        dataType: 'json',
        success: function(data) {
            a.html(data.addr);
            a.attr('href', 'mailto:' + data.addr);
        }
    });
});

PHP

if($_POST['email']) {
    ...
    return json_encode(array(
        code     => '200',
        response => 'success',
        addr     => 'info@domain.ltd'
    ));
}

pour plus de sécurité, Vous pouvez changer .on par .one comme ceci $(document).one('click', '.obfmail', function(e) { ou même travailler avec un token généré par PHP que vous passez en données sur l'appel ajax, pour n'accepter qu'un appel de la fonction ajax comme ceci:

html: <a class="obfmail" href="#" rel="info" token="w3487ghdr6rc">

jquery:

...
addr = a.attr('rel');
tkn  = a.attr('token');
$.ajax({
    data: { 
        email: addr,
        token: tkn
    }, ...

.

il est possible d'encoder l'adresse e-mail retournée trop ou de l'Inverser.

.

fonctionne très bien pour les numéros de téléphone aussi !

1
répondu Meloman 2017-09-11 20:34:58

honnêtement, votre problème peut être discutable si vous posez la question de savoir si oui ou non un mailto est vraiment ce que vous voulez utiliser. Beaucoup de gens qui utilisent le web mail, par exemple, ou n'ont pas le client de messagerie de l'installation dans leur navigateur ne vont pas bénéficier d'un mailto. Vous exposez votre adresse e-mail pour une fonction qui ne va pas fonctionner pour une grande partie de vos utilisateurs.

Ce que vous pourriez faire à la place est d'utiliser un formulaire pour envoyer l'e-mail en coulisses pour que l'adresse e-mail soit cachée et que vous n'ayez pas à vous soucier des pauvres idiots qui ne bénéficieront pas d'une mailto.

0
répondu Brad Barker 2009-04-14 18:30:56

Si vous le dites sur votre site que "Mon adresse e-mail est (mon prénom)@(mon nom de famille).com.", et votre nom et prénom sont vachement évident, qui semble être la meilleure protection anti-spam que vous allez obtenir.

0
répondu Dean J 2009-12-23 15:30:36

si vous travaillez avec PHP, vous pouvez récupérer un script gratuit qui le fait automatiquement. Il s'appelle "Private Daddy" et nous l'utilisons pour notre propre service de streaming audio en ligne. Juste une ligne de code et il fonctionne hors de la boîte... vous pouvez l'attraper ici

0
répondu Reuven 2012-08-07 10:36:34

si quelqu'un utilise des Rails, il peut utiliser le actionview-encoded_mail_to gem. ( https://github.com/reed/actionview-encoded_mail_to )

il y a quelques options:

: encoder - cette clé accepte les chaînes" javascript "ou"hex". Passer "javascript" va dynamiquement créer et encoder le courrier électronique lien ensuite eval il dans le DOM de la page. Cette méthode ne montrera pas le lien sur la page si l'utilisateur a Javascript désactivé. Passant "hex" encodera l'adresse email_address avant d'envoyer le courrier lien.

: replace_at-lorsque le nom du lien n'est pas fourni, le email_address est utilisé pour l'étiquette link. Vous pouvez utiliser cette option pour obscurcissez l'adresse email_address en remplaçant le signe @ par la chaîne de caractères étant donné que la valeur.

: replace_dot-lorsque le nom du lien n'est pas fourni, email_address est utilisé pour l'étiquette de lien. Vous pouvez utilisez cette option pour brouiller l'adresse email en remplaçant le . dans l'e-mail avec la chaîne de caractères donnée en tant que valeur.

0
répondu chug2k 2014-05-24 15:17:57
<!-- Multi-Email Obfuscator  -->
<!-- step 1: &#064; = @  -->
<!-- step 2: a scrap element  -->
<!-- step 3: ROT13 encode for .com  -->
info<!-- step 1 -->&#064;<!-- step 2 --><b style="display:none">my</b>domain<!-- step 3 --><script>document.write(".pbz".replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);}));</script>
0
répondu PHC 2015-09-10 05:34:39

en utilisant JQuery, mais peut facilement être porté sur js simple si nécessaire. Prendra le bloc HTML suivant. Cet exemple que j'ai fourni est aussi pour les liens tel: pour les appels téléphoniques.

<a class="obfuscate" 
 href="mailto:archie...trajano...net">
 archie...trajano...net
</a>
<a class="obfuscate"
 href="tel:+One FourOneSix-EightFiveSix-SixSixFiveFive">
 FourOneSix-EightFiveSix-SixSixFiveFive
</a>

et le convertir aux liens appropriés en utilisant Javascript.

$(".obfuscate").each(function () {

$(this).html($(this).html()
.replace("...", "@").replace(/\.\.\./g, ".")
.replace(/One/g, "1")
.replace(/Two/g, "2")
.replace(/Three/g, "3")
.replace(/Four/g, "4")
.replace(/Five/g, "5")
.replace(/Six/g, "6")
.replace(/Seven/g, "7")
.replace(/Eight/g, "8")
.replace(/Nine/g, "9")
.replace(/Zero/g, "0"))

$(this).attr("href", $(this).attr("href")
.replace("...", "@").replace(/\.\.\./g, ".")
.replace(/One/g, "1")
.replace(/Two/g, "2")
.replace(/Three/g, "3")
.replace(/Four/g, "4")
.replace(/Five/g, "5")
.replace(/Six/g, "6")
.replace(/Seven/g, "7")
.replace(/Eight/g, "8")
.replace(/Nine/g, "9")
.replace(/Zero/g, "0"))

})

Je l'ai documenté plus en détail ici https://trajano.net/2017/01/obfuscating-mailto-links /

l'algorithme de / obfuscation est assez simple de sorte qu'il n'est pas trop fatigant d'écrire non plus (pas besoin de base64 parsing)

0
répondu Archimedes Trajano 2017-01-10 01:41:37

j'utilise un fonction PHP pour générer un peu de javascript pour la sortie de l'email sur la charge de page. Notez que vous ne pas besoin de PHP pour générer le JS à l'exécution, vous pouvez générer le JS une fois localement et ensuite inclure le JS statique dans votre page.

vous pouvez également utiliser la fonction liée avec cet extrait ci-dessous pour brouiller automatiquement les adresses email dans un HTML donné (où $processedContent est le HTML):

 $emailMatches = array();
 $matchCount = preg_match_all('/(?:[a-zA-Z0-9_\.\-])+\@(?:(?:[a-zA-Z0-9\-])+\.)+(?:[a-zA-Z0-9]{2,4})+/', $processedContent, $emailMatches);

 if($matchCount > 0) {
    $emailMatches = $emailMatches[0];

    foreach($emailMatches as $email) {
    $replacement = createJSMailLink($email);

    $processedContent = str_replace($email, createJSMailLink($email), $processedContent);
 }
-1
répondu iloveitaly 2010-11-26 18:00:19

Vérifier ce .

le' formulaire Enkoder ' chiffrera votre adresse e-mail et convertira le résultat en un JavaScript auto-évalué, le cachant des robots de récolte D'e-mails qui rampent sur le web à la recherche d'adresses exposées. Votre adresse sera affichée correctement par les navigateurs web, mais sera virtuellement indéchiffrable pour les robots de récolte de courrier électronique.

-2
répondu Zaki 2010-03-03 10:41:25