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:
ß → ß
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
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.