Wie kann man einen Mailto-Link spammsicher machen?
Lesezeit: 7 Minuten
Ich möchte, dass Besucher eine E-Mail-Adresse direkt auf meiner Webseite anklicken (oder kopieren) können. Wenn ich es jedoch Bots und anderen Crawlern (ein bisschen) schwerer machen könnte, diese E-Mail-Adresse zu erhalten und sie in einer Spam-Liste zu registrieren, wäre das großartig.
Ich habe verschiedene Möglichkeiten gefunden, dies zu tun (dh Mailto-HTML-Links zu codieren), entweder mit JavaScript oder in reinem HTML, aber was empfehlen Sie? Die JavaScript-Techniken scheinen komplizierter zu sein, aber dies kann möglicherweise Benutzer betreffen, die es deaktiviert haben, und legitime Crawler wie Google.
Auf der anderen Seite scheint das HTML ein bisschen einfach zu sein, die Bot-Autoren sollten es inzwischen herausgefunden haben …
Soll ich mir überhaupt die Mühe machen, oder bekommen die Spammer trotzdem meine E-Mail? Ich weiß, dass Antispam-Filter immer besser werden, aber wenn ich etwas mehr tun kann, um Spammer zu verlangsamen, werde ich es tun.
Daniel Wassallo
JavaScript bleibt einer der besten Mailto-Obfuscatoren. Für Benutzer mit deaktiviertem JavaScript möchten Sie möglicherweise den mailto-Link durch einen Link zu einem Kontaktformular ersetzen.
Das Folgende ist ein beliebter JavaScript-Anti-Spam-E-Mail-Obfuscator:
Es gibt auch eine php-version der oben genannten, um verschleierte E-Mails von der Serverseite generieren zu können.
Dies ist der JavaScript-Code, den das obige Tool generieren würde, um meine E-Mail-Adresse zu verschleiern (Kommentare intakt):
<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="https://stackoverflow.com/questions/3624667/mailto:"+link+"">Email Me</a>")
}
//-->
</script><noscript><a href="contact-form.html">Email Me</a></noscript>
Dies mag eine dumme Frage sein, und ich entschuldige mich dafür, dass ich einen so alten Thread kommentiere/frage, aber sobald die Webseite generiert ist, scheint die E-Mail-Adresse im Klartext zu existieren, und Sie können mit der rechten Maustaste klicken und die E-Mail-Adresse kopieren. Wäre es für diese Spam-Bots nicht wirklich einfach, diese Informationen abzugreifen, nachdem sie entschlüsselt und auf der gerenderten Seite angezeigt wurden? Ich kann mir nicht vorstellen, dass es so einfach ist, aber ich kann einfach nicht herausfinden, was das verhindert, und ich würde es sehr gerne wissen. Vielen Dank! 🙂
– Soundfx4
12. Juni 2014 um 20:08 Uhr
Als Antwort auf den obigen Kommentar sind Spam-Bots SEHR einfach, sie wurden entwickelt, um nach HTML-Mailto-Links zu scannen, die Verschleierung selbst verschlüsselt den Mailto-Link, sodass der Spam-Bot ihn nicht lesen kann. Es ist unwahrscheinlich, dass es einen Bot gibt, der intelligent genug ist, um dies zu entschlüsseln, da ein intelligenter Bot nicht kosteneffektiv wäre.
– Raptus
10. Dezember 2014 um 14:13 Uhr
Ich bin mir ziemlich sicher, dass der auf PhantomJS basierende Bot diese E-Mail problemlos lesen kann.
– Boris Okunskiy
16. Dezember 2014 um 20:51 Uhr
Richtig – jedes Headless-Browser-Kit kann diesen Link problemlos lesen. Ich fürchte, keine clientseitige Verschlüsselung oder Verschleierung wird gegen moderne Headless-Browser-Kits funktionieren. Wenn Sie verhindern möchten, dass Ihre E-Mail-Adresse erfasst wird, stellen Sie stattdessen ein E-Mail-Formular bereit. Oder gehen Sie einfach damit um, dass es geerntet wird, und holen Sie sich einen Mailserver mit guter Spamfilterung – moderne Anbieter wie GMail sind intelligent genug, um so ziemlich alles zu filtern.
– mindplay.dk
7. Februar 2015 um 13:30 Uhr
der Link ist tot
– Fanky
Vor 17 Stunden
Dies sieht nach einer wirklich coolen Methode aus, die die Zeichen codiert, von der ich annehme, dass sie grundlegende Spam-Bots besiegen würde:
@beta kannst du bitte genauer sein? Es funktioniert nicht als Mailto oder besiegt keine Spambots? Welche Betriebssystem-/Browserversionen? Hast du andere probiert? Es kann sich um ein plattformspezifisches Problem handeln, das Sie wissen sollten.
Aufbauend auf der Antwort von Daniel Vassallo gibt es eine Möglichkeit, einen Mailto-Link zu verschlüsseln kann Vermeiden Sie cleverere Spambots, die JS auswerten document.writes (wie von incarnate aufgezeigt) wäre, die Entschlüsselung in eine Javascript-Funktion zu stecken, die erst ausgewertet wird, wenn auf den Link geklickt wird. Verwenden Sie beispielsweise base64 als “Verschlüsselung”:
<script>
function decryptEmail(encoded) {
var address = atob(encoded);
window.location.href = "https://stackoverflow.com/questions/3624667/mailto:" + address;
}
</script>
<a href="javascript:decryptEmail('dGVzdEB0ZXN0LmNvbQ==');">Email</a>
Ich behaupte nicht zu wissen, ob dies von einem ausgeklügelteren Crawler überlistet werden könnte oder nicht.
Dies scheint eine einfache und intelligente Lösung zu sein.
– Talha Imam
6. August 2020 um 18:59 Uhr
Dies sollte die akzeptierte Antwort sein. Wenn Sie PHP verwenden, können Sie auch einfach verwenden $encr_email = base64_encode($your_email); und fügen Sie dann die Variable $enc_email zum href-Tag hinzu.
– Peter
22. April um 10:44 Uhr
jensgram
Du könnte benutze die reCAPTCHA Mailverbergen Funktionalität. Dadurch werden E-Mail-Adressen im Formular angezeigt [email protected] wobei die Auslassungspunkte ein Link zum Anzeigen der vollständigen Adresse sind. Es ist ein wenig umständlich für den Besucher, sollte aber einen erstklassigen Schutz bieten. Allerdings wird diese Technik nicht Lassen Sie Ihre Besucher die Adresse direkt von Ihrer Webseite kopieren.
Ich verstehe den Teil über die “legitimen Crawler” wie Google nicht. Zumindest verstehe ich nicht, warum Google die E-Mail-Adresse trotzdem indexieren sollte. (Siehe OPs Kommentar unten.)
James
Sie können externe Dienste wie verwenden aemail.com:
@email ist ein kostenloser Dienst zum Verbergen von E-Mails, der E-Mails mit kurzen URLs verbirgt, die Absender nach dem Klicken auf den Link auf die mailto-URL umleiten.
Nachdem Sie eine E-Mail bei aemail.com eingegeben haben, erhalten Sie eine kurze URL, die verwendet werden kann, um Ihren „mailto“-Link zu ersetzen. Sobald auf den Link geklickt wird, wird Ihr Benutzer ohne Benachrichtigung von aemail.com auf die URL „mailto“ umgeleitet. API kann verwendet werden, um E-Mails zu verbergen/URLs dynamisch zu erhalten.
<script language="javascript" type="text/javascript">
var pre = "hideme";
document.write("<a href="https://stackoverflow.com/questions/3624667/mailto:" + pre + "@domain.com">" + pre
+ "@domain.com</a>");
</script>
<noscript>Enable javascript to see our email!</noscript>
Alex B.
Meine Version generiert den Link spontan aus einer base64-codierten E-Mail-Zeichenfolge, wenn der Benutzer mit der Maus über den Link fährt oder ihn auf einem mobilen Gerät berührt. Alle Links mit dem Attribut „data-gen-email“ funktionieren.
// The string is your base64-encoded email
const emailAddress = atob("bWFpbHRvOnlvdUBkb21haW4uY29t");
// Select all links with the attribute 'data-gen-email'
const emailLinks = document.querySelectorAll('[data-gen-email]');
emailLinks.forEach(link => {
link.onmouseover = link.ontouchstart = () => link.setAttribute('href', emailAddress);
});
Sie können Ihre E-Mail mit base64 codieren btoa('mailto:[email protected]')oder anderswo im Internet: