web-dev-qa-db-fra.com

Comment sécuriser les adresses e-mail des robots sur une page Web?

Lorsque vous placez des adresses électroniques sur une page Web, placez-les sous la forme d'un texte comme celui-ci:

[email protected]

ou utilisez une astuce intelligente pour essayer de tromper les robots collecteurs d'adresses e-mail? Par exemple:

Caractères d'échappement HTML:

joe.somebody@company.com

Javascript Decrypter:

function XOR_Crypt(EmailAddress)
{
    Result = new String();
    for (var i = 0; i < EmailAddress.length; i++)
    {
        Result += String.fromCharCode(EmailAddress.charCodeAt(i) ^ 128);
    }
    document.write(Result);
}

XOR_Crypt("êïå®óïíåâïäùÀãïíðáîù®ãïí");

Humain Decode:

[email protected]

joe.somebody AT company.com

Qu'est-ce que vous utilisez ou vous dérange même?

45
Gary Willoughby

Je ne dérange généralement pas. J'étais sur une liste de diffusion qui recevait plusieurs milliers de spams chaque jour. Notre filtre anti-spam (spamassassin) laisse passer 1 ou 2 par jour. Avec des filtres aussi bons, pourquoi empêcher les personnes légitimes de vous contacter?

47
tloach

Inventez votre propre schéma de brouillage d'adresse de messagerie fou. En réalité, peu importe ce que c'est, tant que ce n'est pas trop similaire à l'une des méthodes connues.

Le problème est qu’il n’ya pas vraiment de bonne solution à cela, ils sont tous relativement simples à contourner ou plutôt irritants pour l’utilisateur. Si une méthode devient répandue, alors quelqu'un sera trouvera un moyen de la contourner.

Ainsi, plutôt que de rechercher la technique d’obscurcissement des adresses électroniques One True, proposez la vôtre. Comptez sur le fait que ces auteurs de bots ne s’intéressent pas suffisamment à votre site pour écrire quelque chose et contourner votre texte un peu fou de rendu texte avec css et éléments ou votre cryptage javascript complètement bizarre et facile à craquer . Peu importe si c'est trivial, personne ne s'embarrassera d'essayer de le contourner simplement pour pouvoir vous spammer.

26
Dan

J'ai écrit un encodeur ( - source ) qui utilise toutes sortes d’astuces d’analyse auxquelles je pouvais penser (différentes sortes d’entités HTML, encodage d’URL, commentaires, attributs multilignes, tirets, non évidentes). structure de mailto: URL, etc)

Cela n'arrête pas tous les pêcheurs, mais OTOH est totalement conforme aux normes et transparent pour les utilisateurs.

Une autre bonne approche à mon humble avis (que vous pouvez utiliser en plus d’un codage complexe) consiste à:

<a href="mailto:[email protected]" 
   onclick="this.href=this.href.replace(/hatestogetspam/,'')">
16
Kornel

Vous pouvez protéger votre adresse e-mail avec reCAPTCHA. Ils offrent un service gratuit. Les internautes doivent donc passer un test CAPTCHA (test de turing public entièrement automatisé pour indiquer à Computers and Humans Apart) de voir votre adresse électronique: https://www.google.com/recaptcha/admin # mailhide

15
GavinCattell

Cela ne me dérangerait pas - il s'agit d'une guerre contre le SPAM au mauvais niveau. En particulier pour les sites Web des entreprises, je pense que cela rend les choses très peu professionnelles si vous avez autre chose que le texte simple sur la page avec un lien hypertexte mailto.

Il y a tellement de pourriels que vous avez besoin d'un bon filtrage, et tout bot finit par comprendre tous les trucs courants.

7
Rob Walker

HTML:

<a href="#" class="--mailto--john--domain--com-- other classes goes here" />

JavaScript, en utilisant jQuery :

// match all a-elements with "--mailto--" somehere in the class property
$("a[class*='--mailto--']").each(function ()
{
    /*
    for each of those elements use a regular expression to pull
    out the data you need to construct a valid e-mail adress
    */
    var validEmailAdress = this.className.match();

    $(this).click(function ()
    {
        window.location = validEmailAdress;
    });
});
5
cllpse

Je ne dérange pas. Vous ne fâcherez que les utilisateurs sophistiqués et vous allez confondre les utilisateurs non-avertis. Comme d'autres l'ont dit, Gmail fournit des filtres anti-spam très efficaces pour un domaine personnel/de petite entreprise, et les filtres d'entreprise sont généralement très performants.

3
Phil

Utilisez plutôt un formulaire de contact. Mettez toutes vos adresses e-mail dans une base de données et créez un formulaire HTML (objet, corps, de ...) qui soumet le contenu de l'e-mail que l'utilisateur remplit dans le formulaire (avec un identifiant ou un nom utilisé pour recherchez l'adresse électronique de cette personne dans votre base de données) dans un script côté serveur qui envoie ensuite un courrier électronique à la personne spécifiée. A aucun moment l'adresse email n'est exposée. Vous voudrez probablement mettre en place une forme de CAPTCHA pour dissuader les spambots également.

2
Bill

Le seul moyen le plus sûr est bien sûr de ne pas insérer l'adresse électronique dans une page Web.

2
gabr

A réponse du mien sur une question similaire:

J'utilise une combinaison très simple de CSS et de jQuery qui affiche correctement l'adresse électronique À l'utilisateur et fonctionne également lorsque l'ancre est Cliquée:

HTML:

<a href="mailto:[email protected]" 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);
});

Ici est un exemple de travail.

2
Sergiu

Pour votre propre adresse e-mail, je vous recommande de ne pas trop vous en préoccuper. Si vous avez besoin de rendre votre adresse e-mail disponible à des milliers d'utilisateurs, je vous recommande d'utiliser une adresse Gmail (Vanilla ou Google Apps) ou un filtre anti-spam de haute qualité.

Cependant, lorsque vous affichez les adresses électroniques d'autres utilisateurs sur votre site Web, je pense qu'un certain degré de diligence raisonnable est requis. Heureusement, un blogueur nommé Silvan Mühlemann a fait tout le travail difficile pour vous . Il a testé différentes méthodes d'obscurcissement sur une période d'un an et demi et déterminé les meilleures. La plupart d'entre elles impliquent des astuces css ou javascript qui permettent de présenter correctement l'adresse dans le navigateur mais qui confondent les grattoirs automatisés.

1
Wedge

Essayez un générateur d'icône de courrier électronique. http://services.nexodyne.com/email/

Bien sûr, il y a encore quelques robots OCR qui pourraient l'obtenir ..

1
prakash

Je fais le mien quelqu’[email protected] et à côté j’écris "Enlevez les majuscules"

1
Joe Phillips

Gmail, qui est gratuit, possède un filtre anti-spam génial.

Si vous ne souhaitez pas utiliser Gmail directement, vous pouvez envoyer le courrier électronique à Gmail et utiliser le transfert par Gmail pour vous le renvoyer après son filtrage par le filtre antispam.

Dans une situation plus complexe, lorsque vous devez afficher une adresse @ business.com, vous pouvez afficher l'adresse [email protected] et faire transférer tout ce courrier vers un compte gmail, qui le renverra ensuite à l'adresse [email protected].

J'imagine que ce n'est pas une solution directe à votre question, mais cela pourrait aider. Gmail étant libre et disposant d'un filtre anti-spam aussi performant, son utilisation est un très bon choix à mon humble avis.

Je reçois environ 100 spams par jour sur mon compte Gmail, mais je ne me souviens pas de la dernière fois où l'un d'entre eux est arrivé dans ma boîte de réception.

Pour résumer, utilisez un bon filtre anti-spam, que ce soit Gmail ou autre. Demander à l'utilisateur de ressaisir ou de modifier l'adresse e-mail affichée revient à utiliser DRM pour se protéger contre le piratage. Mettre le fardeau sur le «bon» gars ne devrait pas être le moyen de faire quoi que ce soit. :)

1
tbate

Voici ce que nous utilisons (VB.NET):

Dim rxEmailLink As New Regex("<a\b[^>]*mailto:\b[^>]*>(.*?)</a>")
Dim m As Match = rxEmailLink.Match(Html)
While m.Success
    Dim strEntireLinkOrig As String = m.Value
    Dim strEntireLink As String = strEntireLinkOrig
    strEntireLink = strEntireLink.Replace("'", """") ' replace any single quotes with double quotes to make sure the javascript is well formed
    Dim rxLink As New Regex("(<a\b[^>]*mailto:)([\w.\-_^@]*@[\w.\-_^@]*)(\b[^>]*?)>(.*?)</a>")
    Dim rxLinkMatch As Match = rxLink.Match(strEntireLink)
    Dim strReplace As String = String.Format("<script language=""JavaScript"">document.write('{0}{1}{2}>{3}</a>');</script>", _
                RandomlyChopStringJS(rxLinkMatch.Groups(1).ToString), _
                ConvertToAsciiHex(rxLinkMatch.Groups(2).ToString), _
                rxLinkMatch.Groups(3), _
                ConvertToHtmlEntites(rxLinkMatch.Groups(4).ToString))
    Result = Result.Replace(strEntireLinkOrig, strReplace)
    m = m.NextMatch()
End While

et

    Public Function RandomlyChopStringJS(ByVal s As String) As String
        Dim intChop As Integer = Int(6 * Rnd()) + 1
        Dim intCount As Integer = 0
        RandomlyChopStringJS = ""
        If Not s Is Nothing AndAlso Len(s) > 0 Then
            For Each c As Char In s.ToCharArray()
                If intCount = intChop Then
                    RandomlyChopStringJS &= "'+'"
                    intChop = Int(6 * Rnd()) + 1
                    intCount = 0
                End If
                RandomlyChopStringJS &= c
                intCount += 1
            Next
        End If
    End Function

Nous remplaçons Render et analysons le code HTML sortant avant qu'il ne parte. Cela restitue les adresses électroniques qui s'affichent normalement dans un navigateur, mais qui ressemble à ceci dans la source:

<script language="JavaScript">document.write('<a '+'clas'+'s='+'"Mail'+'Link'+'" hr'+'ef'+'="ma'+'ilto:%69%6E%66%6F%40%62%69%63%75%73%61%2E%6F%72%67">&#105;&#110;&#102;&#111;&#64;&#98;&#105;&#99;&#117;&#115;&#97;&#46;&#111;&#114;&#103;</a>');</script>

De toute évidence, pas infaillible, mais j'espère réduire une certaine quantité de récolte sans rendre les choses difficiles pour le visiteur.

0
Herb Caudill

Les robots de spam auront leurs propres moteurs Javascript et CSS au fil du temps, je pense donc que vous ne devriez pas regarder dans cette direction.

0
ychaouche

Cela dépend exactement de vos besoins. Pour la plupart des sites avec lesquels je travaille, il m'a été beaucoup plus utile de créer un formulaire "contactez-moi/nous" qui envoie un courrier électronique du système à ceux qui doivent être contactés. Je sais que ce n’est pas exactement la solution que vous recherchez, mais elle protège complètement contre la récolte et, jusqu’à présent, je n’ai jamais vu de spam envoyé via un formulaire de ce type. Cela arrivera mais c'est très rare et vous n'êtes jamais récolté.

Cela vous donne également la possibilité de consigner les messages avant de les envoyer, vous offrant ainsi un niveau supplémentaire de protection contre la perte d'un contact, si vous le souhaitez.

0

Option 1: divisez l'adresse électronique en plusieurs parties et créez un tableau en JavaScript à partir de ces parties. Ensuite, associez ces parties dans le bon ordre et utilisez la propriété .innerHTML pour ajouter l'adresse de messagerie à 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 créateur d’images de 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 
0
saun4frsh

Je viens de coder ce qui suit. Je ne sais pas si c'est bien, mais c'est mieux que d'écrire simplement l'email en texte brut. Beaucoup de robots seront dupes mais pas tous.

<script type="text/javascript">
    $(function () {
        setTimeout(function () {
            var m = ['com', '.', 'domain', '@', 'info', ':', 'mailto'].reverse().join('');

            /* Set the contact email url for each "contact us" links.*/
            $('.contactUsLink').prop("href", m);
        }, 200);
    });
</script>

Si le robot résout ce problème, il n'est pas nécessaire d'ajouter plus de code "logique simple" comme "if (1 == 1? '@': '')" Ou d'ajouter les éléments du tableau dans un autre ordre, car le robot n'évalue que le code. .

0
Sasse

Font-génial fonctionne!

<link rel="stylesheet" href="path/to/font-awesome/css/font-awesome.min.css">

<p>myemail<i class="fa fa-at" aria-hidden="true"></i>mydomain.com</p>

http://fontawesome.io/

0
Ogun Adebali

Une autre technique, peut-être unique, consiste à utiliser plusieurs images et quelques lettres en clair pour afficher l’adresse. Cela pourrait confondre les bots.

0
Joe Phillips

Un script qui enregistre les adresses électroniques dans des fichiers png constituerait une solution sécurisée (si vous disposez de suffisamment d’espace et que vous êtes autorisé à intégrer des images dans votre page).

0
Prog