17.2 HTML_Crypt 

Besprochene Version: 1.2.2 | Lizenz: PHP-Lizenz |
Klassendatei(en): HTML/Crypt.php |
Eine Klasse namens HTML_Crypt mag auf den ersten Blick befremdlich erscheinen. HTML und Verschlüsselung hat augenscheinlich nicht viel miteinander zu tun. Eine Verschlüsselung kann jedoch hilfreich sein, wenn es darum geht, dass Sie Daten auf der Seite vor Suchmaschinen oder Harvestern schützen wollen. Bei Harvestern handelt es sich um Programme, die darauf ausgelegt sind, E-Mail-Adressen zu sammeln, um später Spam an diese Adressen verschicken zu können. Ein recht einfacher Schutz in einem solchen Fall ist es, die Daten serverseitig zu verschlüsseln und erst beim Client wieder mit JavaScript zu dekodieren. Da Suchmaschinen und Harvester dazu üblicherweise nicht in der Lage sind, stellt diese Vorgehensweise einen einfachen, aber wirksamen Schutz dar. Der Nachteil besteht natürlich darin, dass der User die Daten nicht lesen kann, wenn JavaScript auf seinem Rechner deaktiviert ist.
Auch in diesem Fall ist die Nutzung des Pakets erfreulich einfach. Besonders angenehm dabei ist, dass der benötigte JavaScript-Code automatisch mit erstellt wird.
require_once('HTML/Crypt.php'); $crypted = new HTML_Crypt ("cmoehrke@netviser.de"); $crypted->output();
In diesem Fall wird dem Konstruktor sofort der Text übergeben, der geschützt werden soll. Die Methode output() sendet die verschlüsselten Daten inklusive des notwendigen JavaScript-Codes direkt an den Browser. Dort kommt der folgende Code an:
<script language="JavaScript" type="text/JavaScript"> var a,s,n; function j45d14e41b27952d5a77870ae515a5c6a(s) { r=''; for(i=0;i<s.length;i++) { n=s.charCodeAt(i); if(n>=8364) { n=128; } r+=String.fromCharCode(n-3); }return r; } a='fprhkunhCqhwylvhu1gh'; document.write (j45d14e41b27952d5a77870ae515a5c6a(a)); </script>
Zugegebenermaßen habe ich den Code ein wenig umformatiert, um die Lesbarkeit zu erhöhen. Der ursprüngliche Text wird in der vorletzten Zeile der Variable a zugewiesen. Wie Sie feststellen werden, ist die Verschlüsselung recht einfach gehalten. Standardmäßig wird jeder Buchstabe nur um drei Zeichen verschoben. Aus dem c wurde also ein f, aus dem m ein p etc. Möchten Sie einen anderen Offset als 3 nutzen, können Sie das dem Konstruktor mitteilen, indem Sie den gewünschten Wert als Parameter nach dem Text übergeben. Ich möchte Ihnen aber auch nicht verheimlichen, dass der Konstruktor noch einen dritten Wert unterstützt. Übergeben Sie ein false, so wird eine E-Mail-Adresse nicht mit JavaScript verschlüsselt, sondern es wird eine verfremdete Darstellung generiert, die für einen Menschen, zumindest dann, wenn er internet-erfahren ist, verständlich ist. Eine so veränderte E-Mail-Adresse könnte z. B. cmoehrke ^at^ netviser-dot-de lauten. Allerdings funktioniert dieses Verfahren natürlich nur für E-Mail-Adressen.
Möchten Sie mehrere Texte kodieren, benötigen Sie nicht bei jedem Vorgang ein neues Objekt. Ein neuer Text kann jeweils mit setText() zugewiesen werden. In vielen Fällen wird es so sein, dass der Code nicht direkt an den Browser gesendet werden soll. In so einem Fall ist die Member-Funktion getText() sehr hilfreich. Sie liefert den kodierten Text mitsamt der JavaScript-Funktion zurück, so dass dieser in einer Variable abgelegt werden kann.
In vielen Fällen werden Sie eine E-Mail-Adresse gleich mit einem Link hinterlegen wollen, so dass sie direkt angeklickt werden kann, um eine E-Mail zu verschicken. Hier bietet addMailTo() eine Erleichterung. Haben Sie einem HTML_Crypt-Objekt eine E-Mail-Adresse übergeben, ergänzt diese Methode sie um ein entsprechendes Anchor-Tag.
Zwar ist das alles gut und schön, aber wenn Sie statische Seiten haben, in denen viele E-Mail-Adressen vorhanden sind, kann es ein wenig aufwändig sein, diese alle einzeln zu konvertieren. Gleiches gilt, wenn Sie fertige Seiten haben, auf denen Sie die Daten schützen wollen.
Um solche Situationen elegant in den Griff zu bekommen, bietet das Paket eine Unterstützung für das Output-Buffering. Die Methode obStart() startet die Pufferung, und obEnd() beendet sie, liest die gespeicherten Daten aus, kodiert sie und sendet sie an den Browser. So etwas könnte so aussehen:
<?php require_once('HTML/Crypt.php'); $crypted = new HTML_Crypt (); $crypted->obStart(); ?> Hier meine E-Mail-Adresse: <a href='mailto:cmoehrke@netviser.de'>cmoehrke@netviser.de</a> Diese Daten werden verschlüsselt <?php $crypted->obEnd(); ?>
Wichtig ist allerdings, dass nur echte E-Mail-Links kodiert werden. Normale Adressen, die im Verlauf des Textes auftauchen, werden nicht verschlüsselt.