web-dev-qa-db-fra.com

Comment protéger contre le spam un lien mailto?

Je souhaite que les visiteurs puissent cliquer sur (ou copier) une adresse e-mail directement sur ma page Web. Cependant, si je pouvais rendre (un peu) plus difficile pour les robots et autres robots d'exploration d'obtenir cette adresse e-mail et de l'enregistrer dans une liste de spam, ce serait génial.

J'ai trouvé différentes façons de le faire (c'est-à-dire l'encodage de liens HTML vers mail), soit avec JavaScript, soit en HTML pur, mais que recommandez-vous? Les techniques JavaScript semblent plus compliquées, mais cela peut potentiellement affecter les utilisateurs qui l'ont désactivé et les robots d'exploration légitimes comme Google.

D'un autre côté, le HTML semble un peu basique, les rédacteurs de bots auraient dû le comprendre maintenant ...

Dois-je prendre la peine de faire cela, ou les spammeurs recevront-ils mon courrier électronique de toute façon? Je sais que les filtres antispam s'améliorent de plus en plus, mais si je peux faire quelque chose de plus pour ralentir les spammeurs, je le ferai.

44
Wookai

JavaScript reste l'un des meilleurs masqueurs mailto. Pour les utilisateurs avec JavaScript désactivé, vous pouvez remplacer le lien mailto par un lien vers un formulaire de contact.

Ce qui suit est un obfuscateur de courrier électronique JavaScript anti-spam populaire:

Il y a aussi ne version php de ce qui précède pour pouvoir générer des emails obscurcis du côté serveur.

Voici le code JavaScript que l'outil ci-dessus générerait pour masquer mon adresse e-mail (commentaires intacts):

<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 = "[email protected]"
  key = "1DtzZ8TGBuhRjJMKWI4gkUF2qidfOyPmSN7X30Vpso6xvErLnwQCbalA95HcYe"
  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+"'>Email Me</a>")
}
//-->
</script><noscript><a href='contact-form.html'>Email Me</a></noscript>
37
Daniel Vassallo

Cela ressemble à une méthode vraiment cool qui encode les personnages, ce qui, je suppose, vaincrait les robots de spam de base:

http://robspangler.com/blog/encrypt-mailto-links-to-stop-email-spam/

Donc

<a href="mailto:[email protected]">Email</a>

devient

<a href="&#x6d;&#97;&#105;&#108;&#x74;&#111;&#58;&#116;&#101;&#115;&#116;&#x40;&#x74;&#101;&#115;&#x74;&#x2e;&#x63;&#111;&#109;">Email</a>

Il est intéressant en ce qu'il ne nécessite aucun Javascript.

exemple Plunker ici .

13
Harry

Vous pourriez utiliser la fonctionnalité reCAPTCHA Mailhide. Cela affichera les adresses e-mail sur le formulaire [email protected] où les points de suspension sont un lien pour afficher l'adresse complète. C'est un peu encombrant pour le visiteur mais il devrait offrir une protection premium. Cela dit, cette technique pas permettra à vos visiteurs de copier l'adresse directement depuis votre page Web.

Je ne comprends pas la partie sur les "robots légitimes" comme Google. Au moins, je ne vois pas pourquoi Google devrait quand même indexer l'adresse e-mail. (Voir les commentaires des PO ci-dessous.)

10
jensgram

En s'appuyant sur la réponse de Daniel Vassallo, une façon de crypter un lien mailto qui peut éviter les spambots plus intelligents qui évalueront JS document.writes (comme souligné par incarné) serait de mettre le décryptage dans une fonction Javascript qui n'est évaluée que lorsque le lien est cliqué. Par exemple, en utilisant base64 comme "cryptage":

<script>

  function decryptEmail(encoded) {

    var address = atob(encoded);
    window.location.href = "mailto:" + address;

  }

</script>

<a href="javascript:decryptEmail('dGVzdEB0ZXN0LmNvbQ==');">Email</a>

Plunker de travail .

Je ne prétends pas savoir si cela pourrait ou non être déjoué par un robot plus sophistiqué.

5
Harry

Vous pouvez utiliser des services externes comme aemail.com :

@email est un service gratuit de masquage des e-mails qui masque les e-mails à l'aide d'URL courtes redirigeant les expéditeurs vers mailto-url après avoir cliqué sur le lien.

Après avoir entré un e-mail sur aemail.com, vous obtiendrez une URL courte, qui peut être utilisée pour remplacer votre lien "mailto". Une fois le lien cliqué, votre utilisateur sera redirigé vers l'URL 'mailto' sans aucun préavis de aemail.com. API peut être utilisé pour masquer les e-mails/obtenir des URL de manière dynamique.

Exemple:

<a href="mailto:[email protected]">Contact</a>

Remplacé par

<a href="https://aemail.com/q2">Contact</a>

Gardera le lien e-mail fonctionnel.

3
James

J'utilise simplement:

<script language="javascript" type="text/javascript">
var pre = "hideme";
document.write("<a href='mailto:" + pre + "@domain.com'>" + pre
+ "@domain.com</a>");
</script>
<noscript>Enable javascript to see our email!</noscript>
2
HasanG