Maskierung von eMail-Adressen
Von Stephan Soller, 15. März 2008
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 defunktioniert 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) 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
mailtoLinks 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 URI, 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:
ß → ß
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 → a
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 →
my.email@server.de
mailto:my.email@server.de →
mailto:my.email@server.de
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
mailtoLinks 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.
2 Kommentare zu “Maskierung von eMail-Adressen” #comments
1. Von Jan Thiele, 750 Tage später #comment-1377
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. Von Stephan Soller, 752 Tage später #comment-1378
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.