Welcome to Arkanis Development

Maskierung von eMail-Adressen

Published

This post is written in German

Denkt man an eMails, fallen einem leider auch Spam-Mails ein. Spam-Mails werden zu jeder eMail-Adresse gesendet, die irgend wo im Internet von einem Spam-Versender aufgesammelt wurde. Da die Spam-Versende aber nicht das genze Internet selbst durchsuchen, setzten sie dazu kleine oder auch große Hilfsprogramme ein: die Spam-Crawler. Diese Crawler suchen den Quelltext von Internetseiten nach eMail-Adressen ab (crawl, frei Übersetzt "abgrasen") und fügen sie zu den eMail-Listen der Spam-Versender hinzu. Wenig später darf sich der Benutzer der eMail-Adressen über regelmäßig eintreffenden Müll freuen.

Ich bin kein großer Freund von Spam-Filtern, da immer eine gewisse Wahrscheinlichkeit besteht, dass wichtige eMails fehlerhaft als Spam erkannt werden. Aus deisem Grund habe ich mich im Laufe der Zeit damit beschäftigt, wie man die Spam-Crawler davon abhalten kann, eine eMail-Adresse aufzusammeln. Es existieren schon seit einiger Zeit Mittel und Wege, den meisten Spam-Crawlern ein Schnäppchen zu schlagen. Dieser Artikel soll einen kleinen Überblick über einige verwendete Techniken geben.

Methode № 1: Aus Punkt wird "dot"

Mit eine der ersten Methoden, die ich kennen gelernt habe, besteht darin, wichtige Zeichen durch entsprechende Wörter zu ersetzen:

my.email@server.de →
my dot email at server dot de

Diese Methode wird z.B. im PHP-Handbuch eingesetzt. Die meisten Spam-Crawler sind auf Zeichen wie @ oder Punkte angewiesen um eMail-Adressen im Quelltext finden zu können. Werden diese aber durch Worte ersetzt kann ein Crawler sie nicht mehr als eMail-Adresse identifizieren und übersieht sie.

Nachteile

  • eMail-Adressen werden von den Benutzern nicht mehr so schnell identifiziert und können beim Überfliegen der Seite leicht übersehen werden.
  • Keine mailto: Links möglich, da eine korrekt aufgebaute eMail-Adresse nötig ist. mailto:my dot email at server dot de funktioniert als Link nicht.

Vorteile

  • Keine extra Programme oder Funktionen nötig, um eMail-Adresse zu maskieren.
  • eMail bleibt für Menschen lesbar, egal mit welchem Browser bzw. welcher Software der Bensucher die Seite ansieht.

Methode № 2: JavaScript

Eine ebenfalls recht verbreitet Methode, eMail-Adressen zu maskieren, arbeitet mit Hilfe der Scriptsprache JavaScript. Da JavaScript erst bei dem Besucher (dem Client) vom Browser ausgeführt wird, kann man so die eMail-Adresse zerstückelt oder gar verschlüsselt im Quelltest hinterlegen. Über JavaScript wird die eMail-Adresse vom Browser des Besuchers wieder in lesbare Form umgewandelt und angezeigt.

my.email@server.de →
<script type="text/javascript">
    var mailbox = "my.email";
    var domain = "server.de";
    document.write(mailbox + '@' + domain);
</script>

<a href="mailto:my.email@server.de">my.email@server.de</a> →
<script type="text/javascript">
        var mailbox = "my.email";
        var domain = "server.de";
        var together = mailbox + '@' + domain;
        document.write('<a href="' + 'mailto:' + together + '">' + together + '</a>');
</script>

Diese Technik habe ich bis jetzt relativ selten angetroffen. Da JavaScript eine komplette Programmiersprache ist, gibt es unzählige Möglichkeiten, eine eMail-Adresse auseinander zu nehmen und wieder zusammen zu setzen. Einige verwenden sogar Primzahlen: Email Protector. Da die meisten, wenn nicht sogar alle, Spam-Crawler kein JavaScript verstehen, reicht schon sehr simples JavaScript aus, um sie zu überlisten. Man kann also auch mit ruhigem Gewissen auf Primzahlen verzichten.

Nachteile

  • Hat der Benutzer JavaScript deaktiviert, kann die eMail-Adresse nicht dargestellt werden.
  • Zusätzlicher Quelltext für JavaScript nötig. Die größe des JavaScripts variiert stark.
  • Programm zur Maskierung der eMail-Adresse nötig.
  • eMail-Adresse ist im Quelltext für Menschen nicht mehr lesbar.

Vorteile

  • Sehr zuverlässiger Schutz, da die Spam-Crawler aus Zeit- und Leistungsgründen kein JavaScript ausführen.
  • eMail-Adressen könne als Links angezeigt werden.

Persönliche Anmerkung

Man sollte zwar meinen, dass heute inzwischen jeder Benutzer JavaScript aktiviert hat, aber man kann sich nicht darauf verlassen. Ich persönlich deaktiviere z.B. JavaScript recht oft, um die Anzeige lästiger Werbung zu verhindern. Desweiteren stellt JavaScript möglicherweise beim Zugriff über andere Geräte (PDAs, usw.) oder Screenreader ein Problem dar.

Methode № 3: URL-Maskierung

Da die ersten beiden Methoden ihre Nachteile haben, hatte jemand eine andere Idee. In Internet-Adressen (URIs, Uniform Resource Identifiers) können reservierte Zeichen durch ihren Zeichencode (eine Nummer, die das Zeichen repräsentiert) dargestellt werden. Da die Browser diese Zeichen bei der Anzeige automatisch wieder in lesbare Zeichen umwandeln, kann man auch eMail-Adressen in diesem Format angeben:

my.email@server.de →
%6d%79.%65%6d%61%69%6c@%73%65%72%76%65%72.%64%65

<a href="mailto:my.email@server.de">my.email@server.de</a> →
<a href="mailto:%6d%79.%65%6d%61%69%6c@%73%65%72%76%65%72.%64%65">%6d%79.%65%6d%61%69%6c@%73%65%72%76%65%72.%64%65</a>

Der mail_to-Helper von Ruby on Rails verwendet z.B. diese Methode. Einigen Lesern ist vielleicht schon aufgefallen, dass das [mailto], die Punkte und auch das @-Zeichen nicht maskiert werden. Das liegt daran, dass diese Zeichen für den Aufbau der URI bzw. des mailto-Links wichtig sind und daher nicht maskiert werden dürfen. Dadurch läst diese Methode natürlich eine gewisse Angriffsfläche offen.

Nachteile

  • Sonderzeichen dürfen nicht maskiert werden, wird daher von einigen Spam-Crawlern erkannt.
  • Quelltext der eMail-Adresse wird 2 bis 3 mal länger.
  • Programm zur Maskierung der eMail-Adresse nötig.
  • eMail-Adresse im Quelltext für Menschen nicht mehr lesbar.

Vorteile

  • mailto Links möglich.
  • Die eMail-Adresse kann auch als Anzeigetext für den Link verwendet werden.

Persönliche Anmerkung

Technisch gesehen handelt es sich bei mailto Links um URIs, wodurch man auch diese spezielle Maskierung im href-Attribut des Links einsetzten kann. Der Anzeigetext von Links ist allerdings keine URI, also muss diese Maskierung dort auch nicht funktionieren. Praktisch spielt das allerdings kaum eine Rolle.

Ich hab den Ruby on Rails mail_to-Helper in der ersten Version meiner persönlichen Website verwendet, um meine eMail-Adresse zu maskieren. Seit dem bekomme ich von zwei Spam-Versende täglich 1 bis 2 Spam-Mails zugeschickt. Einige Spam-Crawler können diese Maskierung also überwinden.

Methode № 4: Unicode Zeichencodes

Vor ca. einem Jahr hab ich mich etwas ausführlicher mit dem Thema befasst. Einige von euch kennen vielleicht die HTML-Notation für Sonderzeichen:

ß → &szlig;

Nun, dieses System hat mein Interesse geweckt und nach einem kurzen Besuch bei der HTML-Zeichenreferenz von SelfHTML hatte ich die Idee für eine andere Art der Maskierung.

Seit HTML 4.0 kann man ein Zeichen auch durch seinen Unicode-Zeichencode repräsentieren:

a → &#97;

Da diese Notation für alle Buchstaben in HTML und XHTML verwendet werden kann, ist es so möglich, den kompletten mailto-Link zu maskieren. Allerdings war ich nicht der Einzige, der diese Idee hatte. Währen der Entwicklung der zweiten Version von Arkanis Development habe ich mich etwas mit der Text-zu-XHTML Bibliothek Markdown befasst. Markdown maskiert Links auf eMail-Adressen automatisch (siehe Automatic Links) durch die Unicode-Notation, allerdings mischt es auch noch die numerische Notation mit der hexadezimalen Notation. Dadurch wird dieses Verfahren noch etwas sicherer.

my.email@server.de →
&#109;&#x79;&#46;&#101;&#x6d;&#x61;&#x69;&#x6c;&#64;&#115;&#101;&#114;&#118;&#101;&#x72;&#46;&#x64;&#x65;

mailto:my.email@server.de →
&#109;&#97;&#x69;&#108;&#116;&#x6f;&#x3a;&#109;&#121;&#x2e;&#101;&#x6d;&#97;&#x69;&#x6c;&#x40;&#115;&#101;&#114;&#x76;&#x65;&#x72;&#46;&#x64;&#x65;

Diese Codes werden dann vom Browser automatisch wieder in normale darstellbare Zeichen umgewandelt.

Nachteile

  • Quelltext der eMail-Adresse wird 4 bis 6 mal länger.
  • eMail-Adresse im Quelltext ohne Browser für Menschen nicht mehr lesbar.
  • Programm zur Maskierung der eMail-Adresse nötig.

Vorteile

  • mailto Links möglich.
  • eMail-Adressen könne als Links angezeigt werden.

Persönliche Anmerkung

Diese Technik hat sich bei mir mehrmals bewehrt. Auf der Webseite von HelionWeb, meiner persönlichen Website und auch auf der Website meines ehemaligen Arbeitgebers. Seit die HelionWeb Webseite online ging habe ich noch keine Spam-Mails erhalten. Die eMails meines ehemaligen Arbeitgebers wurden gefiltert, wodurch das Spam-Aufkommen natürlich nicht beurteilt werden kann. Allerdings hat mein Arbeitskollege einige nahmenhafte Analyseprogramme über die Webseite laufen lassen… keines hat eine eMail-Adresse gefunden.

Fazit

Die perfekte Methode um eMail-Adressen zuverlässig zu maskieren gibt es leider nicht. Um für sich selbst die beste Methode zu finden muss man die Vor- und Nachteile abwägen. Will man wirklich auf Nummer sicher gehen beitet sich eine JavaScript-Maskierung mit Primzahlen an. Bevorzugt man jedoch pragmatischere Lösungen so bietet meiner Erfahrung nach die Maskierung durch Unicode Zeichencodes einen praxistauglichen Kompromis. Braucht man hingegen eine schnell und einfach umzusetzende Lösung, bietet sich die "Aus Punkt wird "dot"-Methode" an.

Zu guter letzt hab ich für die Unicode-Methode noch ein kleines Tool geschrieben, dass die eingegebene eMail-Adresse codiert und die Zeichencode als auch den Link-Quelltext anzeigt.

Ich hoffe, dieser Artikel verschaft einen kleinen Überblick über die Möglichkeiten, eMail-Adressen im Internet zu schützen. Fragen, Kritiken und Anregungen sind natürlich immer willkommen.

3 comments for this post

leave a new one

#1 by
Jan Thiele
,

Hallo, ein sehr guter Artikel, ich persönlich verwende die java script Methode mit noscript fallback dot. So kann mir jeder eine Email schreiben und wer js deaktiviert hat eben nicht den vollen Komfort. Gruß Jan

#2 by
Stephan Soller
,

Interessante Kombination. Es sollte sogar möglich sein, dass mit ein paar Zeilen JavaScript für die ganze Seite zu erledigen. Danke für den Kommentar Jann.

#3 by
Denny
,

Danke, gute Zusammenstellung!

Leave a new comment

Having thoughts on your mind about this stuff here? Want to tell me and the rest of the world your opinion? Write and post it right here. Be sure to check out the format help (focus the large text field) and give the preview button a try.

Format help

Please us the following stuff to spice up your comment.

An empty line starts a new paragraph. ---- print "---- lines start/end code" ---- * List items start with a * or -

or