Méthode efficace pour masquer les e-mails contre les robots collecteurs de mails


195

Sur ma page d'accueil, j'utilise cette méthode pour masquer mes e-mails contre les robots collecteurs de mails:

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

Qu'est-ce que tu en penses? Est-ce efficace? Quelles autres méthodes connaissez-vous ou utilisez-vous?


Soit il s'agit d'un doublon de stackoverflow.com/questions/163628/… , soit cet autre n'est pas valide car il s'agit d'une longue liste de wiki non communautaire.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

5
Celui-ci a plus de votes positifs, de réponses et de vues. Il ne devrait pas être fermé en faveur d'un autre ayant moins de votes positifs, de réponses et d'opinions.
abatishchev

1
Je fermerais celui-là pour suivre le fait que celui-ci attire beaucoup plus.
abatishchev

6
La meilleure solution est de ne pas partager votre solution . Malheureusement, c'est ce genre de question. Il est préférable de trouver votre solution et de la garder pour vous. Si l'on se standardise, les spambots seront adaptés pour le surmonter.
Dimitris

1
La meilleure solution consiste à combiner plusieurs des solutions ci-dessous , par exemple la première partie du courrier électronique sous forme d'image, la deuxième partie this.href.replace(/x/g,''), la troisième partie codée en hexadécimal, etc. adresse e-mail.

Réponses:


98

C'est la méthode que j'ai utilisée, avec une inclusion côté serveur, par exemple <!--#include file="emailObfuscator.include" -->emailObfuscator.includecontient les éléments suivants:

<!-- // 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>

Pour inclure une adresse, j'utilise 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>

Étant donné que je reçois des e-mails via Gmail depuis 2005, le spam n'est pratiquement pas un problème. Je ne peux donc pas parler de l'efficacité de cette méthode. Vous voudrez peut-être lire cette étude (bien qu'elle soit ancienne) qui a produit ce graphique:

entrez la description de l'image ici


Pourquoi avez-vous besoin d'une inclusion côté serveur emailObfuscator.include? Ne serait-ce pas la même chose que de l'écrire en simple .html? (c'est peut-être juste un exemple?) Aussi pourquoi utilisez-vous des commentaires html <!-- -->dans le script? Et enfin pourquoi une de vos <script>balises est en minuscules alors que d'autres sont en majuscules <SCRIPT>? Ces méthodes aident-elles à confondre les robots ou quelque chose?
Templar

@Templar Le SSI n'est pas nécessaire, ni ne confond les bots pour autant que je sache. Cela rend (fait) mon site modulaire (n'utilisez plus vraiment cette méthode). Le commentaire citait la source d'où j'ai trouvé le hack (maintenant un lien cassé). Le changement de cas n'est qu'un coup de chance. Si cela confond les bots, tant mieux, mais je doute que cela ait un effet.
Fuhrmanator

4
Une étude plus récente et complète explorant la même idée: grall.name/posts/1/antiSpam-emailAddressObfuscation.html
Lucas Cimon

95

Travailler avec le contenu et 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>

Lorsque javascript est désactivé, seul l'événement de clic ne fonctionnera pas, l'e-mail est toujours affiché.

Une autre approche intéressante (au moins sans événement de clic) serait d'utiliser la marque de droite à gauche pour remplacer la direction d'écriture. plus à ce sujet: https://en.wikipedia.org/wiki/Right-to-left_mark


6
Cela nécessite plus de pouce levé.
heXer

Je ne sais pas pourquoi mais bien que cette solution semble assez impressionnante, elle ne déclenche pas mon client de messagerie. Voici un violon pour vous de tester avec: jsfiddle.net/wd436tg3
Ricardo Zea

1
@RicardoZea quel navigateur utilisez-vous? votre violon fonctionne bien pour moi en chrome, ie11, edge et firefox
cyptus

3
Impressionnant. Mais ajoutez un "; return false" à l'événement onclick. Cela empêchera l'ajout laid de # à l'URL du navigateur (en annulant le lien href d'origine)
T4NK3R

5
CEPENDANT - Je ne peux pas copier manuellement l'adresse e-mail (visible) (dans Chrome, Firefox ou Edge)?
T4NK3R

83

Jetez un oeil à cette façon , assez intelligent et en utilisant CSS.

CSS

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

HTML

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

Le CSS ci-dessus remplacera alors le sens de lecture et présentera le texte à l'utilisateur dans le bon ordre.

J'espère que ça aide

À votre santé


54
C'est sûrement drôle. Mais malheureusement, ce n'est pas cliquable et ne fonctionnera pas pour le copier / coller, tout en négligeant tout navigateur non CSS tel que les lecteurs braille.
Arjan

Mhh sympa, mais une fois que les gens qui écrivent des robots le voient, cela devient inutile.
Mau

6
Faire correspondre l'adresse e-mail inversée avec un RegEx est tout aussi simple que de la faire correspondre non inversée. Le spamming est une entreprise d'un milliard de dollars et les spammeurs n'utilisent même pas leurs propres cycles CPU pour gratter les écrans. En fait, ils ont déjà lu cette conversation et ont ajusté leurs méthodes en conséquence. Tout ce qui est lisible par ordinateur va être lisible par les bots. Que ce soit exécuté par CSS ou JavaScript.
Jani Hyytiäinen

3
@ JaniHyytiäinen Je ne suis pas d'accord. Le fait qu'ils ne paient pas pour le CPU ne signifie pas qu'ils disposent de ressources illimitées. Si l'exécution d'un interpréteur JS s'avère produire trop peu d'adresses pour son coût, ils le désactiveront.
o0 '.

1
@Lohoris: Google indique que le temps de chargement moyen des pages est de (2,45 s) et la taille moyenne des pages (320 Ko), cela vous donne une idée de la quantité d'analyse que vous pouvez faire. Pendant qu'un thread de téléchargement effectue les requêtes, un thread d'analyse peut effectuer l'analyse. La majorité des téléchargements est en attente. Ce qui donne au thread dl la possibilité de vérifier les prérequis avant de décider de l'envoyer à l'analyseur. Par exemple, rendre la page, indexOf ('@'), indexOf ('mailto:'), etc. termes de pouvoir d'analyse.
Jani Hyytiäinen

52

J'ai une vision complètement différente de cela. J'utilise MailHide pour cela.

MailHide est un système de Google par lequel l'utilisateur doit effectuer un test reCAPTCHA pour ensuite lui révéler l'e-mail.


15
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien de référence. Les réponses de lien uniquement peuvent devenir invalides si la page liée change.
showdev

5
Bien que je sois généralement d'accord avec ce sentiment, dans ce cas, la réponse est d'utiliser un outil spécifique. Si le lien disparaît, je supprimerai la réponse.
tvanfosson

Merci - c'est super.
J'écris

6
Notez que Google a désactivé MailHide à partir de Match 2018. Comme toujours avec les services Google "gratuits": ils leur offrent aussi longtemps qu'ils peuvent en tirer profit et une fois qu'ils ont ce dont ils ont besoin, ils le laissent tomber. Entreprise la moins fiable pour offrir des services gratuits. Je resterais loin des services de Google ou de quiconque d'autre si vous avez besoin de relayer tout ce que vous essayez de faire.
masi

51

Pas mon idée à l'origine mais je ne trouve pas l'auteur:

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

Ajoutez autant de x que vous le souhaitez. Il fonctionne parfaitement pour lire, copier et coller, et ne peut pas être lu par un bot.


2
Soigné! Mais qu'en est-il des utilisateurs mobiles?
Bodzio

Les survols sont également déclenchés lorsque vous touchez un lien. Cela devrait bien fonctionner.
Andrew Swift

4
Fonctionne tant que votre adresse ne contient aucun x. :-p Mais, je sais, utilisez simplement une lettre différente.
Dan Henderson

1
Mais si javascript est désactivé, vous présentez aux utilisateurs une adresse inexistante qui rebondira en vous perdant un client / utilisateur.
Xeevis

34
Si javascript est désactivé, aucun de mes sites ne fonctionne du tout ;-)
Andrew Swift

16

Je pense que la seule méthode infaillible que vous pouvez avoir consiste à créer une page Contactez-moi qui est un formulaire qui se soumet à un script qui envoie à votre adresse e-mail. De cette façon, votre adresse n'est jamais exposée au public. Cela peut être indésirable pour une raison quelconque, mais je pense que c'est une assez bonne solution. Cela m'énerve souvent lorsque je suis obligé de copier / coller l'adresse e-mail d'une personne de son site vers mon client de messagerie et de lui envoyer un message; Je préfère le faire directement via un formulaire sur leur site. De plus, cette approche vous permet de recevoir des commentaires anonymes, etc. Assurez-vous simplement de protéger votre formulaire en utilisant une sorte de schéma anti-bot, comme un captcha. Il y en a beaucoup discuté ici sur SO.


6
Le seul problème avec ceci est que vous n'avez pas de copie du message que vous avez envoyé, sauf si vous prenez le temps de le copier et de le coller ailleurs. Personnellement, cela ne me dérange pas de copier-coller, mais à chacun son propre.
gvkv

6
En ce qui concerne l'expéditeur n'ayant pas de copie: pour de nombreux types de formulaires sur le Web, j'aime l'option d'obtenir une copie moi-même. Cependant, souvent une telle option permet des abus pour l'envoi anonyme de messages à presque n'importe qui ...
Arjan

12
Cela peut cacher votre adresse e-mail, mais cela n'arrêtera pas du tout le spam, sauf si vous sécurisez votre formulaire avec un script de validation d'image captcha.
SimonDowdles

1
Vous pouvez également résoudre le problème de l'expéditeur n'ayant pas de copie en incluant également une option pour l'envoyer.
steinybot

1
L'option "Envoyer une copie à vous-même" - transforme efficacement le formulaire en un spam-canon, avec vous en tant qu'expéditeur - mauvaise idée!
T4NK3R


10

Si vous avez un support php, vous pouvez faire quelque chose comme ceci:

<img src="scriptname.php">

Et le 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
plutôt que d'utiliser php, vous pourriez créer physiquement l'image. Et comme avec l'invert css, vous avez toujours le problème de ne pas être cliquable et ne peut pas être copié à moins d'utiliser un stylo: P
Claudiu

9

Je sais que ma réponse ne plaira pas à beaucoup, mais veuillez considérer les points soulignés ici avant de baisser le pouce.

Tout élément facilement lisible par machine sera facilement lisible par machine par les spammeurs. Même si leurs actions nous semblent stupides, ce ne sont pas des gens stupides. Ils sont innovants et ingénieux. Ils n'utilisent pas seulement des bots pour collecter les e-mails, ils ont une pléthore de méthodes à leur disposition et en plus de cela, ils paient simplement pour de bonnes nouvelles listes d'e-mails. Ce que cela signifie, c'est qu'ils ont eu des milliers de hackers black-hat dans le monde pour exécuter leur travail. Des gens prêts à coder des logiciels malveillants qui grattent les écrans des navigateurs d'autres personnes, ce qui rend finalement inutile toute méthode que vous essayez de réaliser. Ce fil a déjà été lu par plus de 10 personnes et ils se moquent de nous. Certains d'entre eux peuvent même s'ennuyer jusqu'aux larmes pour découvrir que nous ne pouvons pas leur lancer un nouveau défi.

Gardez à l'esprit que vous n'essayez pas de gagner votre temps mais le temps des autres. Pour cette raison, veuillez envisager de passer du temps supplémentaire ici. Il n'y a pas de solution miracle facile à exécuter qui fonctionnerait. Si vous travaillez dans une entreprise qui publie 100 e-mails de personnes sur le site et que vous pouvez réduire 1 spam par jour et par personne, nous parlons de 36500 spams par an. Si la suppression d'un tel e-mail prend en moyenne 5 secondes, nous parlons de 50 heures de travail par an. Sans parler du montant réduit de la gêne. Alors pourquoi ne pas y consacrer quelques heures?

Ce n'est pas seulement vous et les personnes qui reçoivent l'e-mail qui considèrent le temps comme un atout. Par conséquent, vous devez trouver un moyen d'obscurcir les adresses e-mail de telle manière qu'il ne soit pas rentable de le casser. Si vous utilisez une méthode largement utilisée pour obscurcir les e-mails, cela vaut vraiment la peine de les casser. Depuis, le pirate mettra la main sur des milliers, voire des dizaines ou des centaines de milliers de nouveaux e-mails. Et pour eux, ils obtiendront de l'argent.

Alors, allez-y et codez votre propre méthode. C'est un cas rare où réinventer la roue est vraiment payant. Utilisez une méthode qui n'est pas lisible par machine et qui nécessitera de préférence une certaine interaction de l'utilisateur sans sacrifier l'expérience utilisateur.

J'ai passé environ 20 minutes à coder un exemple de ce que je veux dire. Dans l'exemple, j'ai utilisé KnockoutJS simplement parce que j'aime ça et je sais que vous ne l'utiliserez probablement pas vous-même. Mais ce n'est pas pertinent de toute façon. C'est une solution personnalisée qui n'est pas largement utilisée. Le casser ne sera pas une récompense pour le faire car la méthode de travail ne fonctionnerait que sur une seule page sur le vaste Internet.

Voici le violon: http://jsfiddle.net/hzaw6/

Le code ci-dessous n'est pas censé être un exemple de bon code. Mais juste un petit échantillon de code qui est très difficile pour la machine à comprendre que nous traitons même les e-mails ici. Et même si cela pouvait être fait, ça ne serait pas payant de s'exécuter à grande échelle.

Et oui, je sais que cela ne fonctionne pas sur IE = lte8 à cause de "Impossible d'obtenir les attributs de propriété" de référence non définie ou nulle "mais je m'en fiche simplement parce que c'est juste une démonstration de méthode, pas une implémentation réelle, et non destiné à être utilisé en production tel quel. N'hésitez pas à coder le vôtre qui est plus cool, techniquement plus solide etc.

Oh, et ne jamais nommer quelque chose de mail ou d'email en html ou javascript. Il est tout simplement trop facile de gratter le DOM et l'objet fenêtre pour tout ce qui est nommé courrier électronique ou e-mail et vérifier s'il contient quelque chose qui correspond à un e-mail. C'est pourquoi vous ne voulez jamais de variables contenant du courrier électronique dans sa forme complète et c'est aussi pourquoi vous voulez que l'utilisateur interagisse avec la page avant d'attribuer de telles variables. Si votre modèle d'objet javascript contient des adresses e-mail à l'état DOM prêt, vous les exposez aux spammeurs.

Le 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>

Le 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

L'une de mes méthodes préférées consiste à masquer l'adresse e-mail à l'aide de php, un exemple classique consiste à convertir les caractères en valeurs HEX comme suit:

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

Et puis dans mon balisage, je l'appellerai simplement comme suit:

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

Examinez ensuite votre source, vous serez agréablement surpris!


Voilà un bel exemple. Merci. Des indices sur les SpamBots utilisant le décodage HEX?
jasonflaherty

7

Vous pouvez essayer de masquer des caractères en utilisant des entités html en hexa (ex: & # x40 pour @). C'est une solution pratique, car un navigateur correct le traduira et vous pouvez avoir un lien normal. L'inconvénient est qu'un bot peut le traduire théoriquement, mais c'est un peu inhabituel. J'utilise cela pour protéger mon e-mail sur mon blog.

Une autre solution consiste à utiliser javascript pour assembler une partie de l'adresse et décoder l'adresse à la volée. L'inconvénient est qu'un navigateur désactivé par Javascript n'affichera pas votre adresse.

La solution la plus efficace consiste à utiliser une image , mais il est difficile pour l'utilisateur d'avoir à copier l'adresse à la main.

Votre solution est assez bonne , car vous n'ajoutez qu'un inconvénient (en écrivant manuellement le @) uniquement pour les utilisateurs qui ont désactivé javascript. Vous pouvez également être plus sûr avec:

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

5

Les spambots n'interpréteront pas cela, car c'est une méthode moins connue :)

Tout d'abord, définissez le css:

email:before {
    content: "admin";
}

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

Maintenant, où que vous souhaitiez afficher votre e-mail, insérez simplement le code HTML suivant:

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

Et tada!


Cela fonctionne, mais il ne prend pas en charge le copier-coller, ce qui peut affecter la convivialité pour la plupart des utilisateurs
Iruku Kagika

4

J'utilise une combinaison très simple de CSS et jQuery qui affiche correctement l'adresse e-mail à l'utilisateur et fonctionne également lorsque l'ancre est cliquée ou survolée:

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);
});

Voici un exemple de travail.


affichera-t-il la valeur correcte de href dans la barre d'état du navigateur lorsque le lien sera survolé?
Nik O'Lai

Oui, il affiche la valeur correcte de href lorsque le lien est survolé. C'est pourquoi la méthode jQuery .hover doit être implémentée.
Sergiu

Malheureusement, non, il n'affiche pas la valeur correcte de href, au moins, lorsque vous survolez le lien la première fois (c'est moi@exemple.spam). Au deuxième vol, tout allait bien. Testez-le avec votre propre lien.
Nik O'Lai

1
Cela fonctionne dans Chrome et IE. On dirait que seulement sur Firefox, au premier survol, la barre d'état n'est pas mise à jour. Je vais essayer de trouver une solution pour Firefox.
Sergiu

1
Je vois, je vois, j'aime vraiment celui-ci.
Eric Bishard

3

! - En ajoutant ceci à titre de référence, je ne sais pas à quel point les informations peuvent être obsolètes, mais cela indique quelques solutions simples qui ne nécessitent l'utilisation d'aucun script

Après avoir cherché moi-même, je suis tombé sur cette page mais aussi sur ces pages:

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

essayez d'inverser l'adresse e-mail

Exemple de code HTML simple:

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

Le même effet en utilisant CSS

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

Combiner cela avec l'une des méthodes mentionnées précédemment peut même le rendre plus efficace


3

Une solution simple consiste à utiliser des entités HTML au lieu de caractères réels. Par exemple, le "me@example.com" sera converti 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
Essayez google.se/search?q=HTML+entities+converter qui devrait vous tenir occupé;)
grapefrukt

1
Google peut vous trouver beaucoup de pages pour cela. Un exemple: hp.vector.co.jp/authors/VA022023/javascript/…
Romain Linsolas

4
Mais un bot ne pourrait-il pas aussi facilement exprimer cela?
gargantuesque le

20
Aïe, l'exemple me @ stack ... devrait être écrit comme me@example.com, me@example.net ou me@example.org - ce sont les seuls noms de domaine que les non-propriétaires devraient utiliser dans les exemples!
Arjan


3

Voici ma version de travail:


Créez quelque part un conteneur avec un texte de secours:

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

Et ajoutez en bas du DOM (par rapport au rendu) l'extrait de code suivant:

<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>

Il ajoute le lien hypertexte généré au conteneur spécifié:

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

De plus voici une version minifiée:

<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

La meilleure méthode pour masquer les adresses e-mail n'est bonne que jusqu'à ce que le programmeur de robots découvre cet "encodage" et implémente un algorithme de décryptage.

L'option JavaScript ne fonctionnera pas longtemps, car il y a beaucoup de robots qui interprètent JavaScript.

Il n'y a pas de réponse, à mon humble avis.


Y a-t-il des robots qui interprètent JavaScript? Ma seule méthode d'encodage JavaScript a semblé bien fonctionner pour moi au cours des dernières années - mon taux de spam a été assez stable ~ 4 / semaine, donc je ne me suis pas inquiété des adresses d'autres personnes que j'ai confiées à cette méthode. Devrais-je?
Kev

Bien sûr, cela peut exclure de nombreux robots d'exploration, mais moi, si je
créais

plus d'efforts que vous ne le pensez
lâche anonyme

Google explore actuellement certains JS.
Alister Bulman

2

Il existe probablement des robots qui reconnaissent les [at]déguisements et d'autres comme des @symboles. Ce n'est donc pas une méthode vraiment efficace.

Bien sûr, vous pouvez utiliser certains codages comme le codage URL ou les références de caractères HTML (ou les deux):

// 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>

Mais comme il est légal de les utiliser, chaque navigateur / client de messagerie doit également gérer ces encodages.


Tout à fait d'accord, les spammeurs sont des gens "intelligents", après des années de personnes ajoutant [at] ou [dot] à la place de la syntaxe, bien sûr, ils vont avoir des algorithmes qui captent ces modèles.
SimonDowdles

Qu'en est-il du décodage de ces valeurs HEX?
jasonflaherty

2

Je suis un fan de SpamSpan - il est obscurci, mais toujours déchiffrable si JS est désactivé. Cela semble fonctionner aussi, bien que je ne l'utilise que depuis environ un an sur un site Web à faible trafic.

Il existe également un module pour Drupal pour transformer automatiquement les e-mails en SpamSpans, si vous en avez besoin.


1

Est-ce que cela fonctionne si je fais un clic droit sur le lien et que je choisis "copier l'URL"? Sinon, ce n'est vraiment pas une situation idéale (je clique très rarement sur un lien mailto, préférant copier l'adresse e-mail et la coller dans mon application de messagerie ou partout où j'en ai besoin à un moment précis).

Auparavant, j'étais assez paranoïaque pour protéger mon adresse e-mail en ligne (UseNet, Web et autres), mais ces jours-ci, je soupçonne que davantage de "cibles potentielles pour le spam" sont en fait générées en faisant correspondre les parties locales aux domaines par programme. Je base cela sur avoir, à l'occasion, parcouru les journaux de mon serveur de messagerie. Il y a généralement quelques tentatives de livraison vers des adresses inexistantes (y compris des versions tronquées d'appâts indésirables que j'ai suspendus sur UseNet à la fin des années 90, lorsque le grattage d'adresses était très répandu).


1

après avoir utilisé tant de techniques j'ai trouvé un moyen simple et très convivial, les bots recherchent @ Símbolo et récemment ils recherchent [at] ant c'est une variation donc j'utilise 2 techniques

  1. j'écris mon email sur une image comme les domaintolls et ça marche parfaitement ou
  2. remplacer le Símbolo (@) par une image comme

@ replace et l'image alt sera alt = "@" donc le bot trouvera une image et n'importe quel humain la verra comme une adresse normale donc s'il la copie il copiera l'email et le travail est don donc le code sera

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


1

Je voudrais d'abord m'assurer que l'adresse e-mail ne s'affiche que lorsque vous avez activé javascript. De cette façon, aucun texte brut ne peut être lu sans javascript.

Deuxièmement, un moyen de mettre en œuvre une fonctionnalité sûre est de rester loin de la <button>balise. Cette balise nécessite une insertion de texte entre les balises, ce qui la rend lisible par ordinateur. Essayez plutôt <input type="button">avec un gestionnaire javascript pour un onClick. Utilisez ensuite toutes les techniques mentionnées par otherse pour implémenter une notation de messagerie sécurisée.

Une autre option consiste à avoir un bouton avec "Cliquez pour voir l'adresse e-mail". Une fois cliqué, cela se transforme en un e-mail codé (les caractères des codes HTML). Sur un autre clic, cela redirige vers la fonction «mailto: email»

Une version non codée de la dernière idée, avec des adresses e-mail sélectionnables et non sélectionnables:

<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>

Voyez si c'est quelque chose que vous souhaitez et combinez-le avec les idées des autres. Vous ne pouvez jamais être trop sûr.


2
oh regardez - moi@domaine.extension - il y a l'adresse e-mail en texte brut.
Alister Bulman

1

Et ma fonction. Je l'ai créé en regardant les réponses placées dans ce sujet.

 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;
    }

Il utilise deux méthodes: le dir de droite à gauche et le javascript.


1

Option 1: divisez l'adresse e-mail en plusieurs parties et créez un tableau en JavaScript à partir de ces parties. Joignez ensuite ces pièces dans le bon ordre et utilisez la propriété .innerHTML pour ajouter l'adresse e-mail à la page 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>

Option 2: utiliser l'image au lieu du texte de l'e-mail

Site Web du créateur d'images à partir du texte: http://www.chxo.com/labelgen/

Option 3: nous pouvons utiliser AT au lieu de "@" et DOT au lieu de "."

c'est à dire :

 info(AT)XXXabc(DOT)com 

1
Je pense que l'option 1 n'est pas une bonne option. Un analyseur fonctionnant à côté d'un bot pourrait facilement déterminer la valeur du innerHTML, et l'option 3 n'est probablement pas si bonne non plus, car un bot intelligent pourrait le comprendre. Je pense que l'option 2 est la meilleure.
John Sonderson

1

Je n'aime pas que JavaScript et HTML soient mélangés, c'est pourquoi j'utilise cette solution. Cela fonctionne bien pour moi, pour l'instant.

Idée : vous pourriez le rendre plus compliqué en fournissant des informations chiffrées dans les dataattributs et les déchiffrer dans le JS. Cela se fait simplement en remplaçant les lettres ou en les inversant simplement.

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')
        );
    });  
});

Essayez-le: http://jsfiddle.net/x6g9L817/


1

qu'en est-il de HTML_CHARACTER?:

joe&#064;mail.com

les sorties

joe@mail.com

1
L'adresse e-mail n'est pas cliquable de cette façon et l'emplacement du symbole @ ne sera pas à l'épreuve des balles, en ce sens qu'elle ne sera pas toujours la même que si elle était placée en ligne.
Brent O'Connor

0

Voici une solution jquery simple à ce problème:

<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

Je préfère la réponse d'Ofaurax, mais je modifierais cela pour un e-mail un peu plus caché:

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

0

Je dois juste fournir une autre réponse. Je viens de trouver quelque chose d'amusant à jouer.

J'ai découvert que dans de nombreuses tables de caractères courantes, les lettres @ et az réapparaissent plus d'une fois. Vous pouvez mapper les caractères originaux aux nouveaux mappages et rendre plus difficile pour les robots de spam de comprendre ce qu'est l'e-mail.

Si vous parcourez la chaîne et obtenez le code de caractère d'une lettre, puis ajoutez-y 65248 et créez une entité html en fonction du numéro, vous obtenez une adresse e-mail lisible par l'homme.

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) + ';');
});

Voici un violon qui fonctionne: http://jsfiddle.net/EhtSC/8/

Vous pouvez améliorer cette approche en créant un ensemble plus complet de mappages entre des caractères qui se ressemblent. Mais si vous copiez / collez l'e-mail dans le bloc-notes, par exemple, vous obtenez beaucoup de boîtes.

Pour surmonter certains problèmes liés à l'expérience utilisateur, j'ai créé l'e-mail sous forme de lien. Lorsque vous cliquez dessus, il remappe les caractères à leurs originaux.

Pour améliorer cela, vous pouvez créer des mappages de caractères plus complexes si vous le souhaitez. Si vous pouvez trouver plusieurs caractères qui peuvent être utilisés par exemple à la place de «a», pourquoi ne pas les mapper au hasard.

Ce n'est probablement pas l'approche la plus sûre de tous les temps, mais je me suis vraiment amusé à jouer avec: D

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.