Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 <<   zurück
JavaScript und AJAX von Christian Wenz
Das umfassende Handbuch
Buch: JavaScript und AJAX

JavaScript und AJAX
839 S., mit DVD, 39,90 Euro
Galileo Computing
ISBN 3-89842-859-1
gp Kapitel 27 Code schützen
  gp 27.1 Quellcode einsehen
    gp 27.1.1 Menübefehle
    gp 27.1.2 Tastenkürzel
    gp 27.1.3 Kontextmenü
    gp 27.1.4 Dateisystem
  gp 27.2 Code im Frame verstecken
  gp 27.3 Mausklick verhindern
  gp 27.4 Code codieren
    gp 27.4.1 Optisch verschleiern
    gp 27.4.2 Inhaltlich verschleiern
  gp 27.5 Dateien auslagern
  gp 27.6 Caching verhindern
  gp 27.7 Code serverseitig generieren


Galileo Computing

27.4 Code codieren  downtop

Wenn der JavaScript-Code schon einsehbar ist, können Sie wenigstens dafür sorgen, dass nur Sie ihn verstehen und niemand sonst. Natürlich gibt es Programmierer, die von vornherein so programmieren, dass nur sie noch durch ihren Code durchblicken, aber das wollen wir hier nicht annehmen.


Galileo Computing

27.4.1 Optisch verschleiern  downtop

Wenn Sie also schönen Code vorliegen haben, können Sie wie folgt vorgehen, um es Datendieben ein wenig schwerer zu machen, den Code zu verstehen und einzubinden:

gp  Entfernen Sie alle Kommentare.
gp  Benennen Sie Variablen um. Eine Variable zaehler könnten Sie beispielsweise in FensterReferenz, gurken oder xlbrmf umbenennen. Aber passen Sie auf, dass Sie nicht selbst die Übersicht verlieren!
gp  Entfernen Sie alle Einrückungen und andere Hilfsmittel wie beispielsweise Leerzeilen, die den Code lesbar mach(t)en.
gp  Verzichten Sie möglichst auf Zeilensprünge. Mit ausreichend geschweiften Klammern und Strichpunkten lässt sich der gesamte Code in einer Zeile platzieren.
gp  Verwenden Sie ein wirres Sammelsurium aus mehreren .js-Dateien, die Sie einbinden.
gp  Fügen Sie unsinnige Funktionen und Variablen ein, die gar nicht verwendet werden (aber dafür fast genauso heißen wie tatsächlich verwendete Variablen und Funktionen).

Das waren natürlich nur ein paar Beispiele, in der Praxis sind Ihrer Fantasie kaum Grenzen gesetzt. Sie sollten aber auf jeden Fall eine Sicherheitskopie Ihrer Originalskripten behalten, um im Notfall noch eine funktionierende Kopie Ihres Codes vorliegen zu haben.


Galileo Computing

27.4.2 Inhaltlich verschleiern  toptop

Trotz aller Tricks, den Code umzustellen und hässlich zu machen, sind die Befehle immer noch im Klartext vorhanden. Was spricht also gegen eine Verschlüsselung?

Es gibt hierzu mehrere Ansätze, und wir werden einen recht einfachen davon vorstellen. Der Trick besteht darin, den Code entsprechend umzuwandeln. Schreiben Sie dazu zunächst den notwendigen Code in eine Zeile:

function hallo() { document.write("Hallo!"); } hallo();

Nun geht es darum, obigen Code geeignet zu verschlüsseln. Die einfachste Möglichkeit besteht darin, alle Buchstaben umzuwandeln, beispielsweise indem Sie im Alphabet eine gewisse Anzahl von Zeichen voranschreiten.

Dazu benötigen Sie den ISO-Code des entsprechenden Zeichens. Wir wollen uns hier nur auf Buchstaben beschränken:

gp  a hat den Zeichencode 97.
gp  z hat den Zeichencode 122.
gp  A hat den Zeichencode 65.
gp  Z hat den Zeichencode 90.

Die folgende Funktion verschlüsselt eine Zeichenkette:

gp  Zunächst wird der Zeichencode jedes einzelnen Zeichens bestimmt. Dazu steht die Funktion charCodeAt() zur Verfügung.
gp  Ist das Zeichen ein Buchstabe (Code zwischen 97 und 122 oder zwischen 65 und 90), so wird eine bestimmte Zahl hinzugezählt. Damit der Code etwas schöner wird, achten wir darauf, dass am Ende trotzdem noch ein Buchstabe herauskommt.
Hier ein exemplarisches Beispiel: Das Z hat den Zeichencode 90. Wenn man drei dazuzählt, erhält man 93, dieser Code ergibt aber keinen Buchstaben. Aus diesem Grund beginnen wir bei den Zeichen wieder von vorn. Das Zeichen nach dem Z ist also das A; drei Zeichen nach dem Z kommt wieder das C.
gp  Die Funktion fromCharCode()wandelt den Zeichencode wieder in ein Zeichen um.
gp  Der erzeugte String wird von der Funktion wieder zurückgegeben.

Die Funktion sieht wie folgt aus:

function codeschutz_encode(s, delta) {
   var temp = "";
   var alt, neu;
   for (var i=0; i<s.length; i++) {
      alt = s.charCodeAt(i);
      if (alt >= 65 && alt <= 90) {
         neu = alt + delta;
         if (neu > 90) {
            neu -= 26;
         }
      } else if (alt >= 97 && alt <= 122) {
         neu = alt + delta;
         if (neu > 122) {
            neu -= 26;
         }
      } else {
         neu = alt;
      }
      temp += String.fromCharCode(neu);
   }
   return temp;
}

Der Aufruf

codeschutz_encode("function hallo() { document.write(\"Hallo!\"); } hallo();", 13)

liefert folgendes Ergebnis:

shapgvba unyyb() { qbphzrag.jevgr("Unyyb!"); } unyyb();

Das ist schon etwas kryptischer als zuvor. Zur Decodierung muss der Algorithmus nur noch rückwärts durchlaufen werden, das heißt, der Delta-Wert muss rückwärts durchlaufen werden:

function codeschutz_decode(s, delta) {
   var temp = "";
   var alt, neu;
   for (var i=0; i<s.length; i++) {
      alt = s.charCodeAt(i);
      if (alt >= 65 && alt <= 90) {
         neu = alt – delta;
         if (neu < 65) {
            neu += 26;
         }
      } else if (alt >= 97 && alt <= 122) {
         neu = alt – delta;
         if (neu < 97) {
            neu += 26;
         }
      } else {
         neu = alt;
      }
      temp += String.fromCharCode(neu);
   }
   return temp;
}

Der folgende Code würde also das verschlüsselte Listing ausführen:

var code = codeschutz_decode("shapgvba unyyb() { qbphzrag.jevgr(\"Unyyb!\"); } unyyb(); ");
eval(code);

Achten Sie darauf, im codierten Code Anführungszeichen entsprechend mit \ zu entwerten.

Das folgende Listing hilft Ihnen dabei, Ihren JavaScript-Code entsprechend zu codieren (unter der Prämisse, dass die beiden vorgenannten Hilfsfunktionen in der Datei codeschutz.js stehen). In ein Texteingabefeld geben Sie den Code ein, und auf Knopfdruck wird die kryptische Zeichenkette in einem <textarea>-Element ausgegeben. Der Code wird hier ohne weitere Erklärung wiedergegeben. Er ist nicht sonderlich kompliziert.

<html>
<head>
<title>Code verschlüsseln</title>
<script type="text/javascript" src="codeschutz.js"></script>
<script type="text/javascript"><!--
function encode(f) {
   var eingabe = f.elements["eingabe"].value;
   var delta = parseInt(f.elements["delta"].value);
   var ausgabe = codeschutz_encode(eingabe, delta);
   f.elements["ausgabe"].value = ausgabe;
}
//--></script>
</head>
<body>
<form onsubmit="return false;">
<textarea name="eingabe" cols="70" rows="10">
</textarea><br />
<input type="text" name="delta" value="13" />
<input type="button" value="Kodieren"
  onclick="encode(this.form);" />
<textarea name="ausgabe" cols="70" rows="10"
  onfocus="this.blur();">
</textarea>
</form>
</body>
</html>

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 27.6     Der JavaScript-Code (oben) wurde verschlüsselt (unten).

Sie müssen aber nicht einmal selbst in die Tasten greifen, um Ihren Code zu verschlüsseln. Es gibt im Web eine Reihe von Freeware- und Shareware-Tools, die eine Codeverschlüsselung vornehmen können. Diese Produkte codieren zumeist den kompletten HTML-Code.

Die Seite besteht dann aus einer Menge JavaScript-Code, der (mithilfe von document.write()) die eigentliche HTML-Seite erstellt. Der große Nachteil solcher Programme ist folgender: Wenn der Browser kein JavaScript unterstützt, sieht er natürlich überhaupt nichts. Sie sollten ein solches Mittel also nur sehr bedacht einsetzen. Außerdem kann Ihren Bemühungen ein Uralt-Browser wie der Netscape Navigator 4 einen Strich durch die Rechnung machen. Unter Umständen zeigt diese Version nämlich bei der Verwendung von document.write() den erzeugten Code an, nicht aber den JavaScript-Code.

Durch die Eingabe der Suchbegriffe »html encrypt« bei einschlägigen Download-Angeboten wie etwa http://www.download.com/ erhalten Sie eine Übersicht über potenzielle Hilfsmittel. Bekannte Vertreter sind das englischsprachige Webcrypt Pro (http://www.moonlight-software .com/webcrypt.htm) und das aus deutscher Schmiede stammende HTML Guard (http://www.aw-soft.de/htmlguard.html).

Dieses Vorgehen bietet wohl die mit am besten funktionierende Verschlüsselung von Code, weist aber zwei Nachteile auf:

gp  Das Updaten von Code wird schwieriger, da Sie immer wieder die Umwandlung vornehmen müssen.
gp  An irgendeiner Stelle wird document.write() und/oder eval() aufgerufen. Ein versierter JavaScript-Programmierer kann an dieser Stelle eingreifen und sich den auszuführenden Code ausgeben lassen.
 <<   zurück
  
  Zum Katalog
Zum Katalog: JavaScript und AJAX
JavaScript und AJAX
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: JavaScript und AJAX - Das Video-Training






 JavaScript und AJAX -
 Das Video-Training


Zum Katalog: Webseiten programmieren und gestalten






 Webseiten
 programmieren
 und gestalten


Zum Katalog: XHTML, HTML und CSS






 XHTML, HTML und CSS


Zum Katalog: CSS-Praxis






 CSS-Praxis


Zum Katalog: AJAX






 AJAX


Zum Katalog: PHP 5 und MySQL 5






 PHP 5 und MySQL 5


Zum Katalog: TYPO3 4.0






 TYPO3 4.0


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de