Für Räuber unsichtbar
E-Mail-Adressen tarnen
Tarnen und Täuschen
Das wohl bekannteste Verfahren zum Schutz vor Mail-Harvestern beruht darauf, die E-Mail-Adresse in eine Grafik zu schreiben. Zwar verbirgt dies die Adresse wirksam vor den Harvestern (Abbildung 2, Punkt 3), jedoch auch vor sehbehinderten Seitenbesuchern. Screenreader, die Blinden Zugang zum Internet ermöglichen, verbreiten sich immer stärker; mehr und mehr Webmaster gestalten ihre Seiten so, dass sie sich für diese eigenen. Die Methode sollte also nicht mehr zum Einsatz kommen, zumal es ebenso wirksame Alternativen gibt.
Vielleicht ist Ihnen in URLs schon einmal die Zeichenfolge %20 aufgefallen: Auf diese Weise verschlüsselt der Browser Leerzeichen, die in Internetadressen nicht vorkommen dürfen. URLs, in denen alle Zeichen so (% gefolgt vom hexadezimalen ASCII-Code des Zeichens) dargestellt sind, funktionieren jedoch ebenfalls. Auch in Maillinks (href="mailto:user@example.com") übersetzt der Browser diese Codierung, nicht jedoch bei der Anzeige im Browserfenster. Der Anzeigetexts des Links enthält hier also einen Text wie Mail-Adresse, nicht die Adresse selbst (Listing 1). Allerdings stellt jede vernünftige Webprogrammiersprache (und damit auch jeder nicht allzu einfältige Harvester) eine Funktion zur Verfügung, die diese Codierung rückübersetzt. Das Testergebnis in Abbildung 2 bestätigt die Vermutung, dass das Verfahren zwar wirksam, aber nicht absolut zuverlässig ist: In neun Monaten gingen vier Spam-Mails ein.
<a href="mailto:%75%72%6c%40%65%78%61%6d%70%6c%65%2e%63%6f%6d">Mail-Adresse</a>
HTML enthält außerdem eine Methode, um Sonderzeichen für die Anzeige zu codieren, die so genannten HTML-Entities: Auf ein &-Zeichen folgt dabei der dezimale ASCII-Code des Zeichens, den Abschluss bildet ein Semikolon (Listing 2). Auch diese Codierung sollte sich recht leicht knacken lassen. Der Test bestätigt diese Annahme: Wie die URL-encodierte Adresse zog die HTML-Entities-Variante vier Mails an, in Kombination mit einem nicht encodierten Link immerhin etwa halb so viel wie eine Klartext-Adresse (Abbildung 2, Punkte 5 und 6).
<p>html@example.com</p>
Sicherer erscheinen Ansätze, die auf Javascript zurückgreifen: Der E-Mail-Link ruft eine Javascript-Funktion auf, die die Adresse zurückgibt. Im Test war eine plumpe Lösung versteckt: Die E-Mail-Adresse stand im Klartext im Javascript-Bereich der Datei (Listing 3). Die Harvester konnten die Adresse problemlos lesen (Abbildung 2, Punkt 6). Überraschenderweise scheiterten jedoch alle Harvester, wenn die selbe Funktion (und damit die E-Mail-Adresse im Klartext) wie in Listing 4 in einer externen Datei versteckt war (Abbildung 2, Punkt 7). Wie lange es noch dauert, bis die Adressediebe es lernen, in ausgelagerten Javascript-Dateien nach Adressen zu suchen, lässt sich natürlich nicht vorhersehen.
var mail="js@example.com";
document.write("<p><a href=\"mailto:"+mail+"\">"+mail+"</a></p>");
<!-- Funktion aus Listing 3 in 'scripts.js' ausgelagert --> <script language="javascript" type="text/javascript" src="./scripts.js"></script>
Ruft der Link für die Mail-Adresse eine Javascript-Verschlüsselungsfunktion auf, wie in Listing 5, so stellt dies im Moment für die Harvester eine unüberwindliche Barriere dar (Abbildung 2, Punkt 8): Javascript-Code können sie noch nicht interpretieren. Eigentlich wäre es kein Problem, diese Funktionalität einzubauen – immerhin steht die Javascript-Engine aus dem Mozilla-Projekt im Quelltext zur Verfügung. Es ist also nicht garantiert, dass so getarnte Adressen den Harvestern auch in Zukunft verborgen bleiben.
Wie kompliziert der Verschlüsselungsalgorithmus ist, hat übrigens keinen Einfluss auf die Sicherheit: Der Javascript-Code zur Entschlüsselung muss im Quelltext der Seite oder in einer angegebenen externen Datei vorliegen – sonst könnte der Browser die Adresse nicht entschlüsseln und der Seitenbesucher keine Mail senden. Listing 5 wendet daher nur eine einfache XOR-Operation (^ 183) auf die Zahlenwerte aus den Arrays local und domain an (Zeilen 7 und 10), bevor es sie auf Basis der ASCII-Tabelle in Buchstaben wandelt. Wie immer beim Einsatz von Javascript sollte man bedenken: Hat der Seitenbesucher aus Sicherheitgründen Javascript ausgeschaltet, so funktioniert der Link nicht.
<script language="javascript" type="text/javascript">
var local = new Array (221, 196, 153, 212, 216, 211, 210);
var domain = new Array (210, 207, 214, 218, 199, 219, 210, 153, 212, 216, 218);
var local_part = "";
var domain_part = "";
for (i=0; i<local.length;
local_part += String.fromCharCode(local[i] ^ 183), i++) ;
for (i=0; i<domain.length;
domain_part += String.fromCharCode(domain[i] ^ 183), i++) ;
mailadresse = local_part + String.fromCharCode(64) + domain_part;
function mailMe()
{
document.location.href="mailto:"+mailadresse;
}
</script>
Eine einfache und dennoch erstaunlich wirksame Methode stellt es dar, Leerzeichen zwischen die Buchstaben der Mail-Adresse einzufügen (u s e r @ e x a m p l e . c o m statt user@example.com). Ein Harvester hat hier kaum eine Chance, da er die Leerzeichen nicht von Wortgrenzen unterscheiden kann.
Besser spät als nie
Die Tabelle "Spammenge nach Entfernen einer Adresse" zeigt, dass es sich lohnt, Adressen mit bereits hohen Spamaufkommen nachträglich zu tarnen: Im Test verschwand im September 2005 eine ungetarnte Adresse (mittlere Spalte) von der Testseite und wurde durch eine neue, ähnlich klingende ersetzt. Die rechte Tabellenspalte zeigt zum Vergleich eine unverändert ohne Tarnung veröffentlichte Mailadresse. Es ist deutlich zu erkennen, wie die Spammenge auf der entfernten Adresse abnimmt und gleichzeitig auf der neuen zunimmt. Nach einem Jahr hat sich das Spammenge bei der nicht länger veröffentlichten Adresse im Vergleich auf etwa 50 Prozent reduziert.
Spammenge nach Entfernen einer Adresse
| Monat | Entfernte Adresse | neue Adresse | unveränderte Adresse |
|---|---|---|---|
| 07.2005 | 185 | 222 | |
| 08.2005 | 127 | 136 | |
| 09.2005 | 105 | 90 | |
| 10.2005 | 98 | 119 | |
| 11.2005 | 54 | 11 | 121 |
| 12.2005 | 92 | 16 | 265 |
| 01.2006 | 130 | 10 | 107 |
| 02.2006 | 119 | 35 | 125 |
| 03.2006 | 151 | 218 | 336 |
| 04.2006 | 187 | 282 | 387 |
| 05.2006 | 191 | 249 | 391 |
| 06.2006 | 170 | 202 | 378 |
| 07.2006 | 236 | 576 | 542 |
| 08.2006 | 305 | 758 | 620 |



