Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
1 Einleitung
2 Webbrowser
3 JavaScript einbauen
4 Programmieren mit JavaScript
5 Datum
6 Zufall
7 Browserinformationen
8 Fenster
9 Formulare
10 Frames und Iframes
11 Grafiken
12 Cookies
13 Objekte und Arrays
14 Ereignisbehandlung
15 Fehlerbehandlung
16 DOM
17 DHTML und CSS
18 AJAX
19 XML
20 Web Services
21 AJAX-Frameworks
22 Plugins
23 Multimedia
24 Java
25 Serverseitige Technologien
26 JavaScript goes .NET
27 Code schützen
28 Top Secret: Passwortschutz
29 Signierte Skripte
30 JavaScript und Sicherheit
31 Navigation
32 Warenkorb
33 JavaScript-Bibliotheken
34 Referenz
35 Quellen im Web
36 Die Zukunft von JavaScript
Index
Download: - ZIP, ca. 9,2 MB
Buch bestellen
Ihre Meinung?
<< zurück | Galileo Computing / <openbook> / JavaScript und AJAX | vor >>
JavaScript und AJAX von Christian Wenz Das umfassende Handbuch
JavaScript und AJAX 839 S., mit DVD, 39,90 Euro Galileo Computing ISBN 3-89842-859-1 |
| Kapitel 27 Code schützen
|  | 27.1 Quellcode einsehen
|  |  | 27.1.1 Menübefehle
|  |  | 27.1.2 Tastenkürzel
|  |  | 27.1.3 Kontextmenü
|  |  | 27.1.4 Dateisystem
|  | 27.2 Code im Frame verstecken
|  | 27.3 Mausklick verhindern
|  | 27.4 Code codieren
|  |  | 27.4.1 Optisch verschleiern
|  |  | 27.4.2 Inhaltlich verschleiern
|  | 27.5 Dateien auslagern
|  | 27.6 Caching verhindern
|  | 27.7 Code serverseitig generieren
## 27.4 Code codieren 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. ### 27.4.1 Optisch verschleiern 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:
| Entfernen Sie alle Kommentare.
| 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!
| Entfernen Sie alle Einrückungen und andere Hilfsmittel wie beispielsweise Leerzeilen, die den Code lesbar mach(t)en.
| Verzichten Sie möglichst auf Zeilensprünge. Mit ausreichend geschweiften Klammern und Strichpunkten lässt sich der gesamte Code in einer Zeile platzieren.
| Verwenden Sie ein wirres Sammelsurium aus mehreren .js-Dateien, die Sie einbinden.
| 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. ### 27.4.2 Inhaltlich verschleiern 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:
| a hat den Zeichencode 97.
| z hat den Zeichencode 122.
| A hat den Zeichencode 65.
| Z hat den Zeichencode 90.
Die folgende Funktion verschlüsselt eine Zeichenkette:
| Zunächst wird der Zeichencode jedes einzelnen Zeichens bestimmt. Dazu steht die Funktion charCodeAt() zur Verfügung.
| 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.1
| Die Funktion fromCharCode()wandelt den Zeichencode wieder in ein Zeichen um.
| 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>
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:
| Das Updaten von Code wird schwieriger, da Sie immer wieder die Umwandlung vornehmen müssen.
| 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 | <top> | vor >>
Zum Katalog
JavaScript und AJAX bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung
Buchtipps
| JavaScript und AJAX - Das Video-Training
| Webseiten programmieren und gestalten
| XHTML, HTML und CSS
| CSS-Praxis
| AJAX
| PHP 5 und MySQL 5
| TYPO3 4.0
Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

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