Wegen der heutzutage immer aktiver werdenden Spam-Bots ist auf einer Website keine E-Mail-Adresse mehr sicher. Diese werden automatisch ausgelesen, in einen Index aufgenommen und mit Spam-Mails bombardiert. Damit einem das nicht mit der eigenen E-Mail-Adresse auf der eigenen Website passiert, wurden schon viele „verschlüsselungsverfahren“ entwickelt. In erster linie wird hierbei darauf geachtet, das @ in der E-Mail-Adresse unkenntlich zu machen. Dabei wird dieses durch „[at]“, “ at “ oder andre Umschreibungen ausgetauscht. Dies schützt jedoch auch nur bedingt und sieht dabei noch unschön aus. Deshalb möchte ich hier einmal eine Möglichkeit vorstellen, wie man mit PHP und JavaScript in Kooperation eine für Spam-Bots (welche im allgemeinen sowieso kein JavaScript können) unsichtbare E-Mail-Adresse veröffentlicht, die jedoch in normalen Browsern ohne Einschränkungen sichtbar ist.
Mit PHP wird also der JavaScript-Code mit der verschlüsselten E-Mail-Adresse in den Quellcode geschrieben und JavaScript wird dann diese Zeichenkette entschlüsseln und die Adresse darstellen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
/** * Erzeugt einen (pseudo-)zufälligen String mit der Länge $length Zeichen. Dabei wird nur auf * den in $chars angegebenen Pool von Zeichen zurückgegriffen. Wird dieser Parameter nicht mit * angegeben, so wird ein alphabetischer String erzeugt. * * @param int $length = 10 [, string $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"] * @return string * @see http://www.php-function.de/funktion/strings/random_string/ */ function random_string($length = 10, $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"){ srand(microtime()*1000000); for($i=0;$i<$length;$i++){ $z = rand(0, strlen($chars)-1); $string .= $chars[$z]; } return $string; } /** * Verschlüsselt eine E-Mail-Adresse, indem ein Base64-Encodiertes JavaScript-Array erzeugt wird, * das anschließend browserseitig per JavaScript wieder entschlüsselt wird und die E-Mail-Adresse * anzeigt. * Wird der optionale 2. Parameter angegeben (true), wird die E-Mail-Adresse als Mailto-Link * dargestellt. * * @param string $email * @return boolean $link Gibt an, ob die E-Mail-Adresse klickbar sein soll * @see http://www.php-function.de/funktion/strings/random_string/ */ function encryptEmail($email, $link = false) { if(!$email) return ""; if($link == TRUE) { // Wandle E-Mail-Adresse zu einem Mailto-Link um $email = '<a href="mailto:' . $email . '">' . $email . '</a>'; } // Erzeuge Zeichen-Array for($i = strlen($email) - 1; $i >= 0; $i--) { $js[] .= '"' . base64_encode($email[$i]) . '"'; $js[] .= '"' . base64_encode(random_string(3)) . '"'; } // Erstelle Rückgabe-String $js = implode(", ", $js); return '<script type="text/javascript"> var l=new Array(' . $js . '); for (var i = l.length-2; i >= 0; i=i-2) document.write(Base64.decode(l[i])); </script></p>'; } |
Die erste dieser beiden Funktionen ist lediglich dafür zuständig, eine zufällige Zeichenkette zu erzeugen. Mit dieser Zeichenkette wird die verschlüsselte E-Mail-Adresse dann später durchsetzt. Die 2. Funktion encryptEmail ist für die eigentliche Verschlüsselung der Mail und das Generieren des JavaScript-Codes zuständig. Sie zerlegt die E-Mail-Adresse in einzelne Zeichen, splittet diese in ein Array und durchsetzt dieses mit willkürlichen Elementen. Aus diesem Array wird dann JavaScript-Code generiert, der später für die eigentliche Entschlüsselung zuständig ist, die dann vom Browser übernommen wird. Die Klasse Base64 muss erst in die Website eingebunden werden und kann hier bezogen werden: http://www.webtoolkit.info/javascript-base64.html.