|
<!--#config timefmt="%d.%m.%Y-%H.%M.%S"-->
<A HREF="mailto:seite-<!--#echo var="DATE_GMT"-->-<!--#echo var="REMOTE_ADDR"-->@example.com"></A>
Wie Sie sehen, wird mit <A ein Link geöffnet, der mittels "mailto:" auf
eine E-Mail-Adresse zeigt. Wenn Sie dieses Konstrukt auf mehreren Seiten einsetzen, macht es Sinn, zunächst
eine Kennzeichnung für die jeweilige Seite in die E-Mail-Adresse einzubauen, hier als "seite" dargestellt.
Der weitere Name der E-Mail-Adresse wird mit Hilfe der beiden SSI-Aufrufe #echo
erzeugt, danach folgt der Domainname und dann geht mit > der E-Mail-Link wieder zu.
Die Domain example.com ist hier natürlich nur als Platzhalter für Ihre Domain eingesetzt.
Lassen Sie sich nicht davon irritieren, daß innerhalb des A-Tags wieder ein Tag aufgeht, nämlich die
wie ein Kommentar aussehende SSI-Anweisung, und daß damit nicht nur zwei Tags, sondern auch die Anführungszeichen
ineinander verschachtelt sind. Die Webseite mit dem SSI-Code muß kein valides HTML sein. Erst nach Ausführung
der SSI-Befehle muß valider HTML-Code entstehen. Die SSI-Kommandos habe ich deshalb in etwas dunklerem rot vom
HTML-Quelltext unterschieden.
Nach Ausführung der beiden SSI-Befehle steht anstelle von
<!--#echo var="DATE_GMT"--> der aktuelle Zeitstempel und anstelle
von <!--#echo var="REMOTE_ADDR"--> die IP-Adresse im HTML-Quelltext und somit
ist dann wieder valides HTML entstanden.
Im Gegensatz zu meiner Beispielseite http://spamfang.rehbein.net hat im oben
genannten Stück HTML-Code der Link keinen Inhalt, d.h. der Link geht mit </A>
sofort wieder zu. Meine Beispielseite dient natürlich dazu, die Funktion zu erklären, deswegen habe ich
dort die E-Mail-Adresse sichtbar eingebaut. In der tatsächlichen Anwendung soll ein normaler Besucher den
E-Mail-Link natürlich nicht sehen, sondern nur Harvester sollen den Link einsammeln. Deshalb ist der Link
zwar vorhanden, aber er hat keinerlei Textinhalt, der auf dem Bildschirm angezeigt würde.
Programmierung mit PHP
Ähnlich wie bei SSI wird auch PHP-Code in eine bestehende Webseite eingefügt. Der wesentliche Unterschied
ist, daß mit PHP wesentlich mehr möglich ist. PHP-Code wird mit <?php
und ?> eingebettet.
Die einfache Ausgabe von Datum, Uhrzeit und IP-Adresse sieht in PHP ähnlich aus wie in SSI:
<A HREF="mailto:seite-<?php Echo Date("d.m.Y-H.i.s",Time()); ?>-<?php Echo GetEnv("REMOTE_ADDR"); ?>@example.com"></A>
Im Grunde kann man die Elemente von SSI hier wiedererkennen: Der Befehl zum Ausgaben eines Wertes heißt
auch wieder "echo" und die IP-Adresse des Aufrufs steckt wieder in der Variablen "REMOTE_ADDR". Aber man
sieht schon, daß es sich nicht mehr nur um eine einfache Einbettung von Einzelbefehlen, sondern um eine
Programmiersprache handelt: Aufrufe "Date()" und "Time()" sind ineinander verschachtel; Die Formatierung des
Zeitstempels erfolgt nicht über eine separate Konfiguration, sondern direkt mit dem Befehl "Date()"; Die
Uhrzeit steckt nicht in einer Variablen, sondern wird bei Bedarf mit der Funktion "Time()" abgefragt; Zum
Holen einer Umgebungsvariablen wird die Funktion "GetEnv()" verwendet.
Mit der oben wiedergegebenen SSI-Struktur und mit diesem kleinen Stück PHP-Code setzt man das aktuelle
Datum, die Uhrzeit und die IP-Adresse im Klartext in die E-Mail-Adresse. Dies hat natürlich einen gewissen
Charme, weil man bei den ankommenden Spam-Mails diese Daten direkt im Klartext in der Empfängeradresse
lesen kann. Aber es führt natürlich auch dazu, daß
die Adresse sehr lang ist. Zum einen kann es je nach Provider Probleme geben, Post mit langen Adressen
zu verwalten. Zum anderen gibt es Anzeichen dafür, daß einige Harvester E-Mail-Adressen aber einer bestimmten
Länge nicht in ihre Ergebnislisten aufnehmen.
Deshalb ist es empfehlenswert, Zeitstempel und IP-Adresse in einer kompakteren Form zu speichern. Die
IP-Adressen besteht aus vier Zahlen im Wertebereich 0 bis 255, im Grunde also aus vier jeweils zweistelligen
Hexadezimalzahlen. Also kann man die IP-Adressen auch als achtstellige Hexadezimalzahl hinschreiben.
Die PHP-Funktion Time() liefert bereits einen Zahlenwert, nämlich den Unix-Timestamp.
Dieser entspricht den seit dem 01.01.1970 vergangenen Sekunden und hat einen Wertebereich bis 2147483647 (Dieser
Maximalwert wird am 19. Januar 2038 um 03:14 Uhr und 7 Sekunden erreicht). Statt den Zeitstempel in seine
Bestandteile zu zerlegen, kann man ihn auch direkt ausgeben. Genau wie die IP-Adresse kann man auch den
Zeitstempel hexadezimal schreiben. Der Wertebereich des Unix-Timestamps geht bis 2147483647, was in
hexadezimaler Schreibweise 7FFFFFFF ist. Insofern ist auch der Zeitpunkt eine achtstellige Hexadezimalzahl.
Am 4. Juli 1978 um 21:24 Uhr und 16 Sekunden erreichte der Unix-Timestamp den Wert
268435456, was hexdezimal die Zahl 10000000 ist. Seitdem ist die hexadezimale Schreibweise des Unix-Timestamps
achtstellig. Wir können also ohne Ausnahme davon ausgehen, daß alle Zeitstempel, mit denen wir es hier zu tun
haben werden, in hexadezimaler Schreibweise immer eine achtstellige Zahl sind.
In PHP kann man aus einer gegebenen Zahl die Hexadezimalschreibweise mit der Funktion dechex()
erhalten. Diese Funktion arbeitet im positiven Integer-Wertebereich von PHP, d.h. bis 2147483647, was
hexadezimal 7FFFFFFF ist. Für die Umrechnung des Zeitstempels reicht dies also aus, für die Umrechnung der IP-Adresse
aber nicht. Denn der Adressenraum von 0.0.0.0 bis 255.255.255.255 entspricht ja den Hexadezimalzahlen von 0
bis FFFFFFFF, also dezimal 4294967295.
Es wäre außerdem sowieso unschön, wenn wir aus den vier Einzelzahlen der IP-Adresse erst eine einzige Zahl
machen müssten (was allerdings als Version PHP4 einfach mit dem Befehl "ip2long()" möglich ist), obwohl
doch jede der vier Einzelzahlen bereits zwei Stellen aus dem Ergebnis repräsentiert. Also
können wir doch auch nacheinander die vier durch den Punkt voneinander getrennten Zahlen durchlaufen und jede
einzeln in eine zweistellige Hexadezimalzahl umwandeln:
<?php
function iphex($ip) {
$parts = split("\.",$ip);
$str = "";
for ($i=0; $i<4; $i++) $str.=substr("0".dechex($parts[$i]),-2);
return $str;
};
$hexaddr = iphex(GetEnv("REMOTE_ADDR"));
$hextime = dechex(Time());
?>
Dieser PHP-Programmcode, der sinnvollerweise irgendwo am Anfang der HTML-Datei eingefügt wird, stellt
zunächst eine allgemeine Funktion "iphex()" bereit, die IP-Adressen in Hexaderstellung umwandelt. Dabei wird
mit einem regulären Ausdruck die IP-Adresse in ihre vier Bestandteile gesplittet. Diese vier Bestandteile werden
dann in einer Schleife jeweils in einen Integerwert umgewandelt. Innerhalb dieser Schleife wird dann
die Zahl im Wertebereich von 0 bis 255 in ihre zwei Hexadezimalziffern umgewandelt.
Zum Verständnis dieser Funktion muß man wissen, daß in PHP Variablennamen grundsätzlich mit einem Dollarzeichen
beginnen müssen und daß die Verkettung von Zeichenketten (Strings)
mit Hilfe des Punkts (in vielen anderen Sprachen wird dafür das Pluszeichen verwendet) erfolgt.
Auf Basis der so definierten Funktion "iphex()" wird dann eine
globale Variable $hexaddr mit der Hexadezimaldarstellung der IP-Adresse belegt, außerdem eine globale
Variable $hextime mit der hexadezimaldarstellung des Unix-Timestamps.
An der Stelle, wo der E-Mail-Link stehen soll, sieht es im HTML-Code dann so aus:
<A HREF="mailto:seite-<?php Echo $hextime; ?>-<?php Echo $hexaddr; ?>@example.com"></A>
Die E-Mail-Adresse wird dadurch natürlich entsprechend kompakter. Die beiden Variablen $hextime und $hexaddr sind
jeweils genau acht Zeichen lang. Dafür können Sie bei den eingehenden Spam-Mails die Daten nicht mehr direkt an
der Empfängeradresse ablesen, sondern müssen die Hexadezimalzahlen erst wieder umrechnen. Hierzu können Sie das
Umrechnungsformular unter http://zahlen.alphabet.hoerde.net benutzen.
Anstelle der Umwandlung in eine Hexadezimalzahl sind natürlich auch noch andere Möglichkeiten denkbar,
z.B. unter Verwendung aller Buchstaben des Alphabets. Das Umrechnungsformular auf der
Seite http://zahlen.alphabet.hoerde.net gibt Ihnen dazu ein paar Anregungen.
Allerdings können Sie bei kompakteren Darstellung nicht auf Standard-Funktionen von PHP wie z.B. "dechex()"
zurückgreifen, sondern müssen selbst mehr programmieren.
Wenn Sie in der Programmierung fit sind, können Sie natürlich noch eine Prüfsummenberechnung integrieren.
Dann ist an der Adresse, auf die sie Spam-Mails erhalten, zu sehen, ob sie wirklich aus ihren Seiten stammt oder
ob sich womöglich jemand einen Scherz erlaubt und eine Adresse nach ihrem Muster ausgedacht hat. Mit Prüfziffern,
die nicht als solche zu erkennen sind und deren Algorithmus Sie nicht veröffentlichen, steigern Sie natürlich
auch die Beweiskraft dieser Adressen.
Aus diesem Grund möchte ich für die Berechnung von Prüfziffern keinen Algorithmus angeben oder empfehlen. Denn
ich halte es für besser, wenn jeder Programmierer sich selbst etwas dazu überlegt. Wenn anhand von solchen
E-Mail-Adressen Spammer überführt werden sollen, wenn es z.B. bis vor Gericht geht, dann ist die Glaubwürdigkeit
dieser Analyse natürlich wesentlich höher, wenn verschiedene Webmaster mit unterschiedlichen Überlegungen und
unterschiedlichem Verfahren unabhängig voneinander einen Nachweis der Urheberschaft bestimmter Spam-Mails
darlegen können.
Ein Formular, um die Hexadezimalwerte aus den Empfängeradressen wieder als Uhrzeit oder IP-Adresse
anzuzeigen, finden Sie auf der nachfolgenden Seite:
|