web-dev-qa-db-fra.com

Masquer l'adresse e-mail des robots - Conserver mailto:

tl; dr

Cachez l'adresse électronique des robots sans utiliser de scripts et maintenez la fonctionnalité mailto:. La méthode doit également prendre en charge les lecteurs d'écran.


Sommaire

  • E-mail obfuscation sans en utilisant scripts ou des formulaires de contact

  • L’adresse e-mail doit être complètement visible pour les téléspectateurs humains et maintenir mailto: fonctionnalité

  • Adresse électronique ne doit pas être sous forme d'image.

  • Adresse électronique doit être "complètement" cachée des robots anti-spam et des robots collecteurs de mails et de tout autre type de récupérateur


Effet souhaité:

  • Pas de scripts, s'il vous plaît. Il n'y a pas de scripts utilisés dans le projet et Je voudrais que ça reste ainsi.

  • L’adresse e-mail est soit affichée sur la page, soit peut être facilement affichée après une interaction de l’utilisateur, telle que l’ouverture d’un modal.

  • L'utilisateur peut cliquer sur l'adresse électronique, ce qui déclencherait la fonctionnalité mailto:.

  • Cliquez sur l'e-mail pour ouvrir l'application de messagerie de l'utilisateur.

    En d'autres termes, la fonctionnalité mailto: doit fonctionner.

  • L'adresse email n'est pas visible ou n'est pas identifiée comme une adresse email pour les robots (Ceci inclut la source de la page)]

  • Je n'ai pas de boîte de réception pleine de spam


Qu'est-ce que fonctionne PAS

  • Ajouter un formulaire de contact - ou quelque chose de similaire - à la place de l'adresse email

    Je déteste les formulaires de contact . Je remplis rarement un formulaire de contact. S'il n'y a pas d'adresse e-mail, je cherche un numéro de téléphone et si ce n'est pas là, je commence à chercher un service alternatif. Je ne remplirais un formulaire de contact que si j'avais absolument à le faire.

  • Remplacer l'adresse par une image de l'adresse

    Cela crée un ÉNORME inconvénient pour les utilisateurs de lecteurs d’écran (rappelez-vous les malvoyants dans vos projets futurs)

    Il a également supprime la fonctionnalité mailto: à moins que vous ne rendiez l'image cliquable, puis que vous ajoutiez la fonctionnalité mailto: en tant que href pour le lien, mais que annule le but ​​et maintenant. l'email est visible pour les bots.


Ce qui pourrait fonctionner:

  • Utilisation intelligente de pseudo-elements dans CSS

  • Solutions utilisant le codage base64

  • Décomposition l'adresse e-mail et la répartition des pièces à travers le document, puis les rassembler dans un modal lorsque l'utilisateur clique sur un bouton (Cela impliquera probablement plusieurs classes CSS et l'utilisation de anchor tags )

  • Modifier les attributs html via CSS

    @MortezaAsadi a gracieusement évoqué la possibilité dans les commentaires ci-dessous. Ceci est le lien vers le texte intégral - L'article est de 2012:

    Et si nous pouvions utiliser CSS pour modifier les attributs HTML?

  • Autres solutions créatives qui dépassent mon champ de connaissances.


Questions/corrections similaires

(Ceci est une excellente solution suggérée par Joe Maller, cela fonctionne bien mais c'est basé sur le script. Voici à quoi cela ressemble;

<SCRIPT TYPE="text/javascript">

  emailE = 'emailserver.com'

  emailE = ('yourname' + '@' + emailE)

  document.write('<A href="mailto:' + emailE + '">' + emailE + '</a>')

</script>



<NOSCRIPT>

  Email address protected by JavaScript

</NOSCRIPT>
  • Vous cherchez une fonction d'obscurcissement d'adresse e-mail php uniquement

    (Une solution astucieuse utilisant à la fois PHP et CSS to first reverse l'email utilisant PHP then l'inverse de retour avec CSS ) Une solution très prometteuse qui fonctionne très bien! Mais c'est trop facile à résoudre.

  • Est-il utile de masquer les adresses électroniques sur le Web ces jours-ci?

    (Correction Javascript)

  • Le meilleur moyen de masquer une adresse e-mail sur un site Web?

    La réponse sélectionnée fonctionne. Cela fonctionne vraiment très bien. Il s’agit de coder l’email en tant que html entities. Peut-il être amélioré?

    Voici à quoi cela ressemble.

    <A HREF="mailto:
    
    &#121;&#111;&#117;&#114;&#110;&#097;&#109;&#101;&#064;&#100;&#111;&#109;&#097;&#105;&#110;&#046;&#099;&#111;&#109;">
    
    &#121;&#111;&#117;&#114;&#110;&#097;&#109;&#101;&#064;&#100;&#111;&#109;&#097;&#105;&#110;&#046;&#099;&#111;&#109;
    
    </A>
  • L'obscurcissement d'adresse électronique fonctionne-t-il réellement?

    (La réponse choisie à cette question de superutilisateur est excellente et présente une étude de la quantité de spam reçu en utilisant différentes méthodes d’obscurcissement.

    Il semble que manipuler l'adresse e-mail avec CSS pour la rendre rtl fonctionne. C'est la même méthode que celle utilisée dans la première question que j'ai liée dans cette section.

    Je ne sais pas quels effets l'ajout de la fonctionnalité mailto: au correctif aurait sur les résultats.

  • Il y a aussi beaucoup d'autres questions sur SO qui ont toutes des réponses similaires. Je n'ai rien trouvé qui puisse correspondre mon effet désiré


La question:

Serait-il possible de augmenter l'efficacité (c'est-à-dire avec le moins de spam possible) des méthodes de masquage de courrier électronique ci-dessus par combinant deux correctifs ou plus (ou même ajoutant de nouveaux correctifs) = pendant que:

A- Maintenir la fonctionnalité mailto:; et

B- Lecteurs d'écran supportés


Edit:

Beaucoup de réponses et commentaires ci-dessous posent une très bonne question tout en indiquant l'impossibilité de le faire sans une sorte de js

La question qui est posée/impliquée est la suivante:

Pourquoi ne pas utiliser js?

La réponse est que je suis allergique à js

Blague à part cependant,

Les trois principales raisons pour lesquelles j'ai posé cette question sont les suivantes:

  • Les formulaires de contact sont de plus en plus acceptés comme substituts à la fourniture d'une adresse électronique - ce qu'ils ne devraient pas.

  • Si peut être fait ​​sans script, alors devrait être fait ​​sans script.

  • Curiosity: (étant donné que j'utilise actuellement l'un des correctifs js actuellement), je voulais voir si le fait de discuter de cette question donnerait lieu à une meilleure façon de le faire il.

65
user7234396

Le problème avec votre demande concerne spécifiquement les "lecteurs d’écran de soutien", car, par définition, les lecteurs d’écran sont un "bot" quelconque. Si un lecteur d'écran doit pouvoir interpréter l'adresse électronique, un robot d'exploration de pages pourra également l'interpréter.

En outre, le point de l'attribut mailto doit être la norme sur la manière de créer des adresses électroniques sur le Web. Demander s'il y a une deuxième façon de faire, c'est en quelque sorte demander s'il y a une deuxième norme.

Le fait d'utiliser des scripts aura toujours le même problème, car une fois la page chargée, le script aurait été exécuté et l'adresse électronique restituée dans le DOM (à moins que vous n'ayez renseigné l'adresse électronique on click ou quelque chose du genre). Quoi qu'il en soit, les lecteurs d’écran auront toujours des problèmes avec cela car ce n’est pas déjà chargé.

Honnêtement, obtenez simplement un service de messagerie avec un filtre anti-spam à moitié correct et spécifiez une ligne d'objet par défaut qu'il est facile pour vous de trier dans votre boîte de réception.

<a href="mailto:[email protected]?subject=Something to filter on">Email me</a>

Ce que vous demandez, c'est si la norme a deux façons de faire quelque chose, une pour les bots et l'autre pour les non-bots. La réponse est non, et vous devez simplement combattre les bots du mieux que vous pouvez.

31
k2snowman69

Vaincre les robots de messagerie est une tâche difficile. Vous voudrez peut-être consulter le section Contre-mesures relatives au recueil d'adresses électroniques sur Wikipedia.

Mon histoire est que j'ai écrit un bot de recherche. Plus de 105 000 URL ont été explorées lors de sa première utilisation, il y a de nombreuses années. D'après ce que j'ai appris de cette pratique, les robots d'exploration de sites Web voient littéralement EVERYTHING c'est du texte, qui apparaît sur une page Web. Les robots lisent tout sauf les images.

Le spam ne peut pas être facilement arrêté via un code pour ces raisons:

  1. Les fichiers CSS JS ne sont pas pertinents lors de l’utilisation de la balise mailto:. Les robots examinent spécifiquement les pages HTML pour ce mot clé "mailto:". Tout ce qui va du côlon à la citation simple ou à la citation double suivante (selon la première éventualité) est considéré comme une adresse électronique. Les adresses électroniques d'entités HTML, comme dans l'exemple ci-dessus, peuvent être rapidement traduites à l'aide d'une méthode/fonction inverse ASCII. L'exécution de l'extrait de code JavaScript ci-dessus transforme rapidement la chaîne commençant par: # 121; # 111; # 117; # 114; ... en ... "[email protected]". (Mon moteur de recherche a jeté des hrefs avec mailto: adresses e-mail, car je voulais des URL pour les pages Web et non des adresses e-mail.)

  2. Si une page bloque un bot, son auteur l’ajustera pour qu’il répare l’incident en gardant à l’esprit cette page, afin qu’il ne se bloque plus à l'avenir. Rendre ainsi leur bot plus intelligent.

  3. Les auteurs de bots peuvent écrire des bots générant toutes les variantes connues d'adresses e-mail ... sans explorer les pages, sans jamais utiliser d'adresses e-mail de démarrage. Bien que cela ne soit peut-être pas faisable, cela n’est pas inconcevable avec les processeurs à grand nombre de cœurs (qui fonctionnent en hyper-thread à plus de 4 GHz), ainsi qu’à la possibilité d’utiliser une informatique en nuage distribuée, même des super-ordinateurs. Il est concevable que quelqu'un puisse maintenant créer une batterie de robots pour envoyer du spam à tout le monde, sans connaître l'adresse e-mail de qui que ce soit. Il y a 20 ans, cela aurait été incompréhensible.

  4. Les fournisseurs de messagerie gratuits vendent depuis longtemps leurs comptes d’utilisateur gratuits à leurs annonceurs. Autrefois, le simple fait de créer un compte de messagerie gratuit leur garantissait automatiquement le feu vert pour commencer à envoyer du spam à cette adresse électronique ... sans jamais utiliser cette adresse électronique en ligne. J'ai vu cela se produire plusieurs fois, avec des noms de sociétés célèbres. (Je ne citerai aucun nom.)

  5. Le mot-clé mailto: fait partie de ceci RFC IETF , où les navigateurs sont conçus pour lancer automatiquement les clients de messagerie par défaut, à partir de liens contenant ce mot-clé. JavaScript doit être utilisé pour interrompre le processus de lancement de l'application, le cas échéant.

Je ne pense pas qu'il soit possible d'arrêter 100% du spam en utilisant des serveurs de messagerie traditionnels, sans utiliser de filtres sur le serveur de messagerie et éventuellement en utilisant des images.

Il existe une alternative ... Vous pouvez également créer un client de messagerie ressemblant à un chat, qui fonctionne en interne sur un site Web. Ce serait comme le client de chat de Facebook. C'est "un peu comme le courrier électronique", mais pas vraiment le courrier électronique. Il s’agit simplement d’une messagerie instantanée 1-à-1 avec une fonctionnalité d’archivage ... qui se charge automatiquement lors de la connexion. Comme il a des fonctions de pièce jointe + lien, cela fonctionne un peu comme un email ... mais sans le spam. Tant que vous ne construisez pas une API accessible de l'extérieur, il s'agit d'un système fermé dans lequel les utilisateurs ne peuvent pas envoyer de spam.

Si vous envisagez de vous en tenir à la messagerie strictement traditionnelle, le mieux est peut-être d'exécuter quelque chose comme l'Apache SpamAssassin sur le serveur de messagerie d'une entreprise.

Vous pouvez également essayer de combiner plusieurs stratégies, comme indiqué précédemment, pour empêcher les utilisateurs de collecter des e-mails de glaner des adresses e-mail à partir de vos pages Web. Ils n'arrêteront pas 100% du spam, 100% du temps ... tout en permettant à 100% des lecteurs d'écran de fonctionner pour des visiteurs aveugles.

Vous avez créé un très bon aperçu de ce qui ne va pas avec le courrier électronique traditionnel! Bravo à vous pour cela!

Un bon lecteur d’écran est MÂCHOIRES de Freedom Scientific . Je l'ai déjà utilisé pour écouter la façon dont mes pages Web sont lues par des utilisateurs aveugles. (Si vous entendez une voix masculine lisant les deux actions [comme en cliquant sur un lien], essayez de changer une voix en une voix de sorte qu'une voix lise les actions d'un autre lit le texte. Cela facilite la lecture de la lecture visuelle de la page Web. imparfait.)

Bonne chance avec vos Contre-mesures de récolte d'adresse électronique efforts!

29
Clomp

Voici une approche qui utilise JavaScript, mais avec une empreinte assez petite. C'est aussi très "ghetto", et généralement je ne recommanderais pas une approche avec JS en ligne dans le code HTML, sauf que vous avez une extrême réticence à utiliser JS, du tout.

<a
  href="#"
  data-contact="bGUtZW1haWxAdGhlLWRvbWFpbi5jb20="
  data-subj="QW4gQW1hemluZyBTdWJqZWN0"
  onfocus="this.href = 'mailto:' + atob(this.dataset.contact) + '?subject=' + atob(this.dataset.subj || '')"
  >
  Send an email
</a>

data-contact est l'adresse électronique codée en base64. Et data-subj est un sujet facultatif codé en base64.

Le principal défi à relever pour ce faire sans JS est que CSS ne peut pas modifier les attributs HTML. (Le article vous avez lié est une rêverie "et n'a aucune incidence sur ce qui est possible aujourd'hui ou dans un avenir proche.)

L’approche des entités HTML que vous avez mentionnée, ou une variante de celle-ci, est probablement l’option la plus simple et efficace. De plus, l'approche iframe est intelligente et l'approche approche de redirection du serveur est assez impressionnante. Mais tous les trois sont vulnérables aux robots:

  • Les entités HTML doivent simplement être converties (et détecter cela est simple)
  • Le document référencé par l'iframe peut simplement être suivi
  • La redirection du serveur peut simplement être suivie, ainsi

Avec l'approche décrite ci-dessus, l'utilisation d'une adresse électronique codée en base64 dans un attribut data-contact est très "ponctuelle" - tant que le scrapper n'est pas spécifiquement conçu pour votre site, il devrait fonctionner.

14
tiffon

Simple + Beaucoup de @ + Editable sans outils

<a href="mailto:user@domain@@com"
   onmouseover="this.href=this.href.replace('@@','.')">
   Send email
</a>
8
MaanooAk

Avez-vous envisagé d'utiliser recaptcha mailhide de Google? https://www.google.com/recaptcha/admin#mailhide

L'idée est que lorsqu'un utilisateur coche la case (, voir nocaptcha ci-dessous ), l'adresse de messagerie complète est affichée.

Bien que recaptcha soit traditionnellement non seulement difficile pour les lecteurs d'écran, mais également pour les humains, avec le roleout de nocaptcha recaptcha de Google sur lequel vous pouvez lire des informations sur ici en ce qui concerne les tests d'accessibilité. Il semble être prometteur en ce qui concerne les lecteurs d’écran, car il se présente sous forme de case à cocher traditionnelle. Nocaptcha reCAPTCHA

Exemple # 1 - Pas sécurisé mais pour illustrer facilement l'idée

Voici quelques exemples de code sans utiliser mailhide mais implémenter vous-même quelque chose avec recaptcha: https://jsfiddle.net/43fad8pf/36/

<div class="container">
    <div id="recaptcha"></div>
</div>
<div id="email">
    Verify captcha to get e-mail
</div>

function createRecaptcha() {
    grecaptcha.render("recaptcha", {sitekey: "6LcgSAMTAAAAACc2C7rc6HB9ZmEX4SyB0bbAJvTG", theme: "light", callback: showEmail});
}
 createRecaptcha();

function showEmail() {
    // ideally you would do server side verification of the captcha and then the server would return the e-mail
  document.getElementById("email").innerHTML = "[email protected]";
}

Remarque: dans mon exemple, l'e-mail est une fonction javascript. Idéalement, vous devriez faire valider recaptcha sur le serveur et renvoyer l'e-mail, sinon le bot peut simplement l'obtenir dans le code.

Exemple # 2 - Validation et renvoi d'e-mail côté serveur

Si nous utilisons un exemple plus semblable à celui-ci, nous obtenons une sécurité supplémentaire: https://designracy.com/recaptcha-using-ajax-php-and-jquery/

function showEmail() {
    /* Check if the captcha is complete */
    if ($("#g-recaptcha-response").val()) {
        $.ajax({
            type: ‘POST’,
            url: "verify.php", // The file we’re making the request to
            dataType: ‘html’,
            async: true,
            data: {
                captchaResponse: $("#g-recaptcha-response").val() // The generated response from the widget sent as a POST parameter
        },
        success: function (data) {
            alert("everything looks ok. Here is where we would take 'data' which contains the e-mail and put it somewhere in the document");
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("You’re a bot");
        }
    });
} else {
    alert("Please fill the captcha!");
}
});

Où verify.php est:

$captcha = filter_input(INPUT_POST, ‘captchaResponse’); // get the captchaResponse parameter sent from our ajax

/* Check if captcha is filled */
if (!$captcha) {
    http_response_code(401); // Return error code if there is no captcha
}
$response =     file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=YOUR-SECRET-KEY-HERE&amp;amp;response=" . $captcha);
if ($response . success == false) {
echo ‘SPAM’;
http_response_code(401); // It’s SPAM! RETURN SOME KIND OF ERROR
} else {
// Everything is ok, should output this in json or something better, but this is an example
    echo '[email protected]'; 
}
6
Brian

Les personnes qui écrivent des grattoirs veulent rendre leurs grattoirs aussi efficaces que possible. Par conséquent, ils ne téléchargeront pas les styles, scripts et autres ressources externes. À ma connaissance, il n'existe aucune méthode pour définir un lien mailto à l'aide de CSS. En outre, vous avez spécifiquement indiqué que vous ne souhaitiez pas définir le lien à l'aide de Javascript.

Si vous réfléchissez aux autres types de ressources disponibles, vous trouverez également des documents externes (documents HTML utilisant des iframes). Presque aucun racleur ne se donnerait la peine de télécharger le contenu des iframes. Par conséquent, vous pouvez simplement faire:

index.html:

<iframe src="frame.html" style="height: 1em; width: 100%; border: 0;"></iframe>

frame.html:

My email is <a href="mailto:[email protected]" target="_top">[email protected]</a>

Pour les utilisateurs humains, l'iframe ressemble à du texte normal. Les iframes sont en ligne et transparents par défaut. Il suffit donc de définir sa bordure et ses dimensions. Vous ne pouvez pas adapter la taille de l'iframe à celle de son contenu sans utiliser Javascript. Par conséquent, le mieux que nous puissions faire est de lui donner des dimensions prédéfinies.

4
Leo Jiang

Premièrement, je ne pense pas que faire quelque chose avec CSS fonctionnera. Tous les robots (sauf le robot de Google) ignorent tout simplement le style des sites Web. Toute solution doit fonctionner avec JS ou côté serveur.

Une solution côté serveur pourrait consister à créer un <a> qui soit relié à un nouvel onglet, qui redirige simplement vers le mailto souhaité:

C'est toutes mes idées pour l'instant. J'espère que ça aide.

3
Pablo Kvitca

Réponse courte pour répondre à toutes vos exigences, c'est que c'est impossible

Certaines des options basées sur un script répondues ici peuvent fonctionner pour certains bots, mais vous ne vouliez pas de script, alors non, vous ne pouvez pas.

2
peiiion