E-Mail-Adressen verschleiern um vor Spam zu schützen

confused_spambot

Dass Bots das Web nach E-Mail-Adressen durchforsten und diese dann für Spam-Mails verwenden ist inzwischen jedem bekannt. Um dies zu verhindern werden verschiedenste Methoden angewandt, um Mail-Adressen zu verschleiern und so für Bots unkenntlich zu machen (siehe Bild). Das simple Ersetzen des @ durch (at) ist vermutlich die einfachste Option und ist nach wie vor sehr Üblich im Web. Es ist jedoch zweifelhaft, wie sicher diese Methode heutzutage noch sein kann. Bei einem Bot, welcher intelligent genug ist selbstständig Websites nach Mail-Adressen zu durchkämmen, liegt die Vermutung nahe, dass neue Algorithmen auch das (at) korrekt erkennen und ersetzen könnten.

Verschleierung via CSS

Weitere simple Verschleierungstechniken können recht einfach mit CSS umgesetzt werden. Beispielsweise kann Text einfach rückwärts dargestellt werden: moc.elpmaxe@ofni

<span class="spam-rtl">moc.elpmaxe@ofni</span>
.spam-rtl { unicode-bidi: bidi-override; direction: rtl; }

Das Besondere an dieser Mail-Adresse wird erst im Quelltext ersichtlich. Durch ein simples CSS wurde die Schreibrichtung für diesen String umgekehrt. Dies hat allerdings auch zur Folge, dass die Mail-Adresse via Copy/Paste nicht verwendet werden kann. Andere Methoden beinhalten beispielsweise einen <span> innerhalb der Adresse zu verstecken: infonoSpam@example.noSpamcom

info<span class="spam-hide">noSpam</span>@example.<span class="spam-hide">noSpam</span>com
.spam-hide { display: none; }

Verschleierung via JavaScript

Die gezeigten Methoden haben leider alle eine grosse Schwachstelle: sie können nicht über mailto: verlinken, da hier die Adresse wieder im Klartext stehen muss. Hierfür gibt es diverse Methoden die Adresse via JavaScript abzufangen und codiert auszugeben. Der Fantasie sind hierbei kaum Grenzen gesetzt, wie diese Frage auf stack overflow beweist. Mit Hilfe dieses Tools kann automatisch ein Script erstellt werden, welches den mailto:Link und den Linktext verschlüsselt. Für gängige CMS bestehen viele Plugins, die JavaScript nutzen um Mail-Adressen zu schützen. Für WordPress können wir z.B. den Email Address Encoder empfehlen.

Ausgabe via WordPress-Funktion

WordPress selbst bietet auch ein Bordmittel, um Mail-Adressen verschlüsselt auszugeben. Dieses lässt sich allerdings nicht für Content im Editor sondern nur direkt im Code der Templates nutzen. Auf diesem Blog verlinken wir den Namen des Autors (einfach Links über das Bild hovern) direkt mit seiner Mail-Adresse. Üblicherweise wird hierfür folgender Code genutzt:

<a href="mailto:<?php echo get_the_author_meta('user_email');?>" title="Mail an <?php echo the_author_meta( 'nickname' ); ?>"><?php echo the_author_meta( 'nickname' ); ?></a>

Um die Adresse direkt von WordPress verschleiern zu lassen, kann um die Funktion get_the_author_meta einfach die antispambot()-Funktion gesetzt werden:

<?php echo antispambot(get_the_author_meta('user_email'));?>

Fazit

Möglichkeiten E-Mail-Adressen im Web zu schützen gibt es wie Sand am Meer. Sicher ist, je kreativer die Methode ist, desto länger wird es dauern, bis die Bots nachgerüstet sind und die Verschleierung aushebeln. Aus diesem Grund kann es rein theoretisch von Vorteil sein, sich eine ganz eigene Methode hierfür auszudenken und mit JavaScript umzusetzen. Diese (zugegebenermassen sehr alte) Statistik auf dem tilllate Techblog zeigt, dass zumindest im Jahr 2008 schon simple JavaScript-Methoden genügten, um Spam auf ein Minimum zu reduzieren. Leider konnten wir keine aktuellere Statistik hierzu finden, aber vermutlich sollte die Koevolution von Bots und Scripts gegen eben diese dazu führen, dass auch die heute gängig eingesetzten Scripts das Gros der Bots ins Leere laufen lässt. Aus diesem Grunde ist der Einsatz eines Plugins in den meisten Fällen wohl die einfachste Lösung.

Was sind eure Erfahrungen hiermit? Simples CSS, oder JavaScript? Self-made oder Plugin? Hinterlasst gerne ein Kommentar, wir freuen uns über jedes Feedback!

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.