[Diese Seite ist Teil der Homepage www.daniel-rehbein.de]

SSI- und PHP-Skripte für dynamische E-Mail-Adressen


 
 Spam & Adressensammler
(Navigation 2.Ebene)  Die Thematik
(Navigation 2.Ebene)  Harvester täuschen
(Navigation 3.Ebene)  Ein Beispiel...
(Navigation 3.Ebene)  Mail konfigurieren
(Navigation 3.Ebene)  Serverseitige Skripte
(Navigation 4.Ebene)  SSI und PHP
(Navigation 3.Ebene)  Zurückrechnen
(Navigation 2.Ebene)  Adreßlisten vergiften
(Navigation 2.Ebene)  Weitere Informationen

Wenn Sie also die Vorarbeiten geschafft haben, also Ihr Server bereit ist, Skripte in Ihrem HTML-Dateien auszuführen, und wenn Sie wissen, an welche Domain die E-Mails adressiert werden sollen, dann kann's jetzt endlich losgehen.

Fangen wir zunächst an mit SSI (Server Side Includes). Danach gehe ich auf die Programmiersprache PHP ein und zeige, wie man Zeitstempel und IP-Adresse als Hexadezimalwerte ausgeben kann.

SSI-Elemente in der Webseite sehen aus wie HTML-Kommentare, d.h. sie werden durch <!-- und --> umschlossen. Von einem sonstigen HTML-Kommentar unterscheiden sie sich dadurch, daß ein mit dem Zeichen # eingeleitetes Befehlswort folgt. Für die konkrete Anwendung benötigen Sie die beiden SSI-Befehle #config und #echo.

Der SSI-Befehl #config dient zur Konfiguration. Im konkreten Fall soll konfiguriert werden, daß die Uhrzeit ausgegeben wird in dem Format "Tag, Punkt, Monat, Punkt, Jahreszahl, Bindestrich, Stunde, Punkt, Minute, Punkt, Sekunde". Der Befehl #echo dient dazu, eine bestimmte Variable auszugeben, d.h. dynamisch in den HTML-Code der Webseite einzusetzen. Konkret soll die Zeit im vorher konfigurierten Format und die IP- Adresse ausgegeben werden. Die Zeit ist in der Variablen DATE_GMT gespeichert, die IP-Adresse, von der die Webseite gerade aufgerufen wird, in der Variablen REMOTE_ADDR. Der SSI-Code für den E-Mail-Link sieht also so aus:

<!--#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:

 

[Foto:brechten-haltestelle.jpg]


[Abrufstatistik]  Homepage  Impressum