Cacher L'adresse e-mail des Bots-garder mailto:

tl; dr

masquer l'adresse e-mail des bots sans utiliser de scripts et maintenir la fonctionnalité mailto: . Méthode doit également soutenir les lecteurs d'écran.


résumé

  • e-Mail obfuscation "sans 1519390920" à l'aide scripts ou des formulaires de contact

  • adresse e-Mail doit être visible de l'homme et des téléspectateurs maintenir "151920920 de" fonctionnalité

  • Adresse de Courriel ne doit pas être dans la forme d'une image .

  • adresse de Courriel doit être "complètement" caché spam-les robots et le spam-bots et tout autre arracheuse de type


Effet Désiré:

  • pas de scripts , s'il vous plaît. Il n'y a pas de scripts utilisés dans le projet et j'aimerais que cela reste ainsi .

  • adresse e-mail est soit affiché sur la page ou peut être facilement affiché après une certaine sorte d'interaction de l'utilisateur, comme l'ouverture d'un modal.

  • l'utilisateur peut cliquer sur l'adresse email qui à son tour déclencherait la fonctionnalité mailto: .

  • cliquer sur le courriel ouvrira l'application de courriel de l'utilisateur.

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

  • L'e-mail adresse non visible ou non identifiée comme une adresse e-mail aux bots (ceci inclut la page source)

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


qu'est-ce que Non travailler

  • Ajouter un formulaire de contact - ou quelque chose de similaire - au lieu de l'adresse e-mail

    je déteste les formulaires de contact . J'ai rarement rempli un formulaire de contact. S'il n'y a pas d'adresse courriel, je cherche un numéro de téléphone, et si ce n'est pas le cas, je commence à chercher un autre service. Je ne remplirais un formulaire de contact que si je le devais absolument.

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

    cela crée un énorme inconvénient à quelqu'un en utilisant un lecteur d'écran ( s'il vous plaît rappelez-vous les déficients visuels dans vos projets futurs )

    supprime la fonctionnalité mailto: à moins de rendre l'image cliquable et d'ajouter ensuite la fonctionnalité mailto: comme le href pour le lien, mais que va à l'encontre du but et maintenant l'email est visible pour les robots.


ce qui pourrait marcher:

  • Clever de l'utilisation de pseudo-elements dans CSS

  • Solutions qui font usage de base64 codage

  • Breaking up l'adresse e-mail et la diffusion des parties à travers le document, puis de les rassembler dans un modal lorsque l'utilisateur clique sur un bouton (cela impliquera probablement plusieurs classes CSS et l'utilisation de anchor tags )

  • altérer html attributs via CSS

    @MortezaAsadi a gracieusement évoqué cette possibilité dans les commentaires ci-dessous. C'est le lien vers la full - L'article est à partir de 2012:

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

  • autres solutions créatives qui dépassent mon champ de connaissance.


Questions Similaires / Corrections

(c'est une grande correction suggérée par Joe Maller, elle fonctionne bien mais c'est script basé . Voici à quoi il 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>
  • à la recherche d'une fonction PHP only email address obfuscator

    (une solution intelligente utilisant à la fois PHP et CSS à la première Inverser l'email en utilisant PHP puis Inverser retour avec CSS) une solution très prometteuse qui fonctionne très bien! Mais c'est trop facile à résoudre .

  • vaut-il la peine d'obscurcir les adresses e-mail sur le web ces jours-ci?

    (correction Javascript)

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

    La réponse sélectionnée œuvres . Il fonctionne vraiment bien. Il s'agit d'encoder le courriel comme html entities . Peut-il être amélioré?

    Voici à quoi il ressemble;

    <A HREF="mailto:
    
    yourname@domain.com">
    
    yourname@domain.com
    
    </A>
  • Ne e-mail de la dissimulation de l'fonctionnent-ils réellement?

    (la réponse choisie à cette question de superutilisateur est grande et il présente une étude de la quantité de spam reçu en utilisant différentes méthodes de brouillage.

    il semble que la manipulation de l'adresse e-mail avec CSS pour en faire rtl fonctionne. C'est la même méthode que celle utilisée dans la première question à laquelle j'ai fait référence 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 tous ont similaire réponse. Je n'ai rien trouvé qui correspond à mon effet désiré


La Question:

serait - il possible de augmenter l'efficacité (c'est-à-dire aussi peu de spam que possible) de l'email méthodes d'obfuscation ci-dessus par combinant deux ou plusieurs des correctifs (ou même l'ajout de nouveaux correctifs) tandis que:

A - Maintien de la "151920920 la fonctionnalité"; et

B - Soutenir les lecteurs d'écran


modifier:

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

le question qui est demandé / implicite est:

pourquoi ne pas utiliser js ?

la réponse est que je suis allergique à js

blague à part,

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

  • les formulaires de Contact sont de plus en plus acceptés comme un substitut pour fournir une adresse de courriel, ils ne devraient pas.

  • si peut être fait sans script alors il doit être fait sans l'écriture de scripts.

  • Curiosity: (comme j'utilise en fait l'un des correctifs js actuellement) je voulais voir si discuter de la question conduirait à une meilleure façon de le faire.

52
demandé sur Community 2016-12-25 08:51:42

9 réponses

le problème avec votre demande est spécifiquement les" lecteurs D'écran de soutien", comme par définition les lecteurs d'écran sont un" bot " d'une sorte. Si un lecteur d'écran doit être en mesure d'interpréter l'adresse e-mail, puis une page-robot serait capable de l'interpréter ainsi.

en outre, le point de l'attribut mailto doit être la norme de la façon de faire des adresses de courriel sur le web. Demander s'il y a une seconde façon de faire, c'est en quelque sorte demander s'il y a une seconde norme.

le faire à travers des scripts aura toujours le même problème qu'une fois la page chargée, le script aurait été lancé et l'adresse email rendue dans le DOM (à moins que vous ne remplissiez l'adresse email on click ou quelque chose du genre). Quoi qu'il en soit, les lecteurs d'écran auront encore des problèmes avec cela puisqu'il n'est pas déjà chargé.

honnêtement, juste obtenir un service de courrier électronique avec un filtre de spam moitié décent et spécifier une ligne d'objet par défaut qui est facile pour faire le tri dans votre boîte de réception.

<a href="mailto:no-one@no-where.com?subject=Something to filter on">Email me</a>

ce que vous demandez 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 que ce n'est pas le cas, et tu dois juste combattre les bots du mieux que tu peux.

26
répondu k2snowman69 2018-04-11 10:19:32

vaincre les robots de messagerie est difficile. Vous pouvez consulter la section sur Wikipedia.

ma rétro-histoire est que j'ai écrit un bot de recherche. Il a rampé plus de 105 000 URLs lors de son lancement il y a de nombreuses années. De ce que j'ai appris de faire qui est que web crawling bots littéralement voir tout qui est du texte, qui apparaît sur une page web. Les robots de lire tout sauf image.

Spam ne peut pas être facilement arrêté via le code pour ces raisons:

  1. CSS & JS ne sont pas pertinents lorsque vous utilisez l'étiquette mailto: tag. Les Bots regardent spécifiquement les pages HTML pour le mot-clé " mailto:". Tout, de ce point-là à la prochaine citation simple ou double citation (selon ce qui arrive en premier) est considéré comme une adresse e-mail. Les adresses courriel des entités HTML - comme l'exemple ci - dessus-peuvent être rapidement traduites en utilisant un ascii inversé. méthode/fonction. En exécutant L'extrait de code JavaScript ci-dessus, tourne rapidement la chaîne qui commence par: votre... dans... "yourname@domain.com". (Mon robot de recherche a jeté hrefs avec mailto:email adresses, car je voulais des URLs pour les pages web et pas des adresses e-mail.)

  2. si une page plante un bot, l'auteur du bot ajustera le bot pour corriger le crash avec cette page à l'esprit, de sorte que le bot ne crash pas à cette page à l'avenir. Faisant ainsi leur bot Smarts.

  3. les auteurs de Bot peuvent écrire des bots, qui génèrent toutes les variations connues d'adresses e-mail... sans pages rampantes et sans jamais utiliser d'adresses e-mail de démarrage. Bien qu'il ne soit peut-être pas possible de faire cela, ce n'est pas inconcevable avec les processeurs de comptage à haute fréquence (qui sont hyper-threadés et fonctionnent à 4+ GHz) d'aujourd'hui, en plus de la disponibilité de l'utilisation de l'informatique distribuée basée sur le nuage et même des super-ordinateurs. Il est concevable que quelqu'un peut maintenant créer un bot-farm à spam tout le monde, sans connaître l'adresse e-mail de quiconque. Il y a 20 ans, cela aurait été incompréhensible.

  4. les fournisseurs de courriels gratuits ont l'habitude de vendre leurs comptes d'utilisateurs gratuits à leurs annonceurs. Par le passé, le simple fait de s'inscrire à un compte de courriel Gratuit leur garantissait automatiquement le feu vert pour commencer à transmettre des pourriels à cette adresse de courriel... sans jamais utiliser cette adresse e-mail en ligne. J'ai vu arriver plusieurs times, avec des noms célèbres. (Je ne vais pas citer des noms.)

  5. the mailto: keyword is part of this IETF RFC , où les navigateurs sont construits pour lancer automatiquement les clients email par défaut, à partir de liens avec ce mot-clé dans eux. JavaScript doit être utilisé pour interrompre ce processus de lancement de la demande, quand il se produit.

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

il y a une alternative... Vous pouvez également créer un client de messagerie chat, qui fonctionne en interne sur un site web. Ce serait comme le client de chat de Facebook. C'est "un peu comme un courriel", mais pas vraiment un courriel. Il s'agit simplement d'une messagerie instantanée 1 à 1 avec une fonction d'archivage... cela se charge automatiquement lors de la connexion. Étant donné qu'il comporte des fonctionnalités de fichier joint + lien, il fonctionne en quelque sorte comme e-mail... mais sans le spam. Tant que vous ne construisez pas une API accessible de l'extérieur, c'est un système fermé où les gens ne peuvent pas envoyer de spam.

si vous prévoyez de vous en tenir au courriel strictement traditionnel, alors votre meilleure option serait d'exécuter quelque chose comme le SpamAssassin D'Apache sur le serveur de courriel d'une entreprise.

vous pouvez également essayer de combiner plusieurs stratégies comme vous l'avez énuméré ci-dessus, pour le rendre plus difficile pour le courrier électronique moissonneuses pour 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 travailler pour les visiteurs non-voyants.

vous avez créé un très bon regard de départ sur ce qui ne va pas avec l'email traditionnel! Bravo à vous pour que!

un bon lecteur d'écran est JAWS de liberté scientifique . Je l'ai déjà utilisé pour écouter comment mon les pages Web sont lues par des utilisateurs aveugles. (Si vous entendez une voix masculine lire les deux actions [comme cliquer sur un lien] et le texte, essayez de changer 1 voix en femelle de sorte que 1 voix lit les actions et un autre lit le texte. Cela rend plus facile d'entendre comment la page web est lue pour les visuellement impar é.)

Bonne chance avec votre Adresse Email de la Récolte de contre-mesure projets!

21
répondu Clomp 2016-12-27 09:16:24

Ici est une approche qui n'utiliser JavaScript, mais avec une petite empreinte. C'est aussi très "ghetto", et généralement Je ne recommande pas une approche avec inline JS dans le 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 email encodée de base64. Et, data-subj est un sujet codé en option base64.

Le principal défi avec faire cela sans JS, c'est que CSS ne peut pas modifier les attributs HTML. (Le article vous lié est une "tarte-dans-le-ciel" 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 qui aura une certaine efficacité. En outre, le iframe approche est intelligent et le redirection du serveur l'approche est assez impressionnant. Mais, tous les trois sont vulnérables aux bots:

  • les entités HTML ont juste besoin d'être converties (et la détection qui est simple)
  • le document référencé par l'iframe pourrait simplement être suivi
  • la redirection du serveur pourrait simplement être suivie ,ainsi

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

9
répondu tiffon 2017-05-23 12:18:01

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

l'idée est que lorsqu'un utilisateur clique sur la case à cocher ( voir nocaptcha ci-dessous ), l'adresse e-mail complète est affichée.

alors que recaptcha est traditionnellement non seulement difficile pour les lecteurs d'écran, mais aussi les humains aussi, avec le rôle de recaptcha de Google dont vous pouvez lire sur ici en ce qui concerne les critères d'accessibilité. Il semble prometteur en ce qui concerne les lecteurs d'écran comme il rend comme une case à cocher traditionnelle de leur point de vue. Nocaptcha reCAPTCHA

exemple #1 - pas sûr mais pour une illustration facile de l'idée

voici un code comme exemple sans utiliser mailhide mais implémentant quelque chose en utilisant recaptcha vous-même: 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@something.com";
}

Note: dans mon exemple, j'ai l'e-mail dans une fonction javascript. Idéalement, vous devriez valider la recaptcha à la fin du serveur, et retourner l'e-mail, sinon le bot peut simplement l'obtenir dans le code.

exemple #2-validation côté serveur et retour du courriel

si nous utilisons un exemple plus comme celui-ci, nous obtenez 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@something.com'; 
}
4
répondu Brian 2017-01-03 05:37:32

les gens qui écrivent des racleurs veulent rendre leurs racleurs aussi efficaces que possible. Par conséquent, ils ne téléchargeront pas les styles, les scripts et d'autres ressources externes. Il n'y a pas de méthode que je connaisse pour définir un lien mailto en utilisant CSS. De plus, vous avez spécifiquement dit que vous ne vouliez pas configurer le lien En utilisant Javascript.

si vous pensez aux autres types de ressources, il y a aussi des documents externes (c.-à-d. des documents HTML utilisant iframes). Presque pas de grattoirs prendrait la peine de télécharger le contenu de l'iframe. Par conséquent, vous pouvez simplement faire:

de l'index.html:

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

frame.html:

My email is <a href="mailto:me@example.com" target="_top">me@example.com</a>

pour les utilisateurs humains, l'iframe ressemble à du texte normal. Iframes sont en ligne et transparent par défaut, nous avons donc juste besoin de définir sa frontière et les dimensions. Vous ne pouvez pas faire correspondre la taille de l'iframe à la taille de son contenu sans utiliser Javascript, donc le mieux que nous puissions faire est de lui donner cotes prédéfinies.

3
répondu Leo Jiang 2016-12-27 07:01:47

D'abord, je ne pense pas que faire quoi que ce soit avec CSS marchera. Tous les bots (à L'exception de Google crawler) ignorent tout simplement tout style sur les sites web. Toute solution doit fonctionner avec JS ou côté serveur.

une solution côté serveur pourrait être de faire un <a> qui lie à un nouvel onglet, qui redirige simplement vers le désiré mailto :

ce sont toutes mes idées pour le moment. Espérons que cela aide.

3
répondu Pablo Kvitca 2016-12-29 00:36:05

Simple + Lot de @ + éditable sans outils

<a href="mailto:user@domain@@com"
   onmouseover="this.href=this.href.replace('@@','.')">
   Send email
</a>
3
répondu MaanooAk 2017-01-03 00:38:54

réponse courte pour répondre à toutes vos exigences est que il est impossible

certaines des options basées sur le script qui ont répondu ici peuvent fonctionner pour certains bots, mais vous vouliez un non-script, donc, non, vous ne pouvez pas.

2
répondu peiiion 2017-01-02 15:04:56

la seule méthode que j'ai trouvé efficace est de l'utiliser avec css comme ci-dessous:

<a href="mailto:myemail@ignore-domain.com">myemail@<span style="display:none;">ignore-</span>domain.com

et ensuite écrire un javascript pour supprimer le mot ignoreme- de l'attribut href="mailto:..." avec regex. Cela masquera le courrier électronique de bot car il ajoutera ignore- mot avant le domaine réel et cela fonctionnera sur le lecteur d'écran et lorsque l'utilisateur clique sur le lien personnalisé js fonction supprimera le ignore- mot de href attribut de sorte qu'il ouvrir l'e-mail réelle.

cette méthode a fonctionné très efficacement pour moi jusqu'à ce jour. vous pouvez en savoir plus sur ce - http://techblog.tilllate.com/2008/07/20/ten-methods-to-obfuscate-e-mail-addresses-compared /

-1
répondu Ashish Panchal 2017-01-19 07:22:16