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 28 Top Secret: Passwortschutz
|  | 28.1 URL aus Passwort
|  |  | 28.1.1 Passwort == URL
|  |  | 28.1.2 Passwort » URL
|  |  | 28.1.3 f : Passwort ® URL
|  | 28.2 Seiten mit Cookies schützen
|  |  | 28.2.1 Passwort im Quelltext
|  |  | 28.2.2 Mit Java
|  | 28.3 Ein Blick über den Tellerrand
|  |  | 28.3.1 PHP
|  |  | 28.3.2 .htaccess
## 28.2 Seiten mit Cookies schützen Um eine Seite mit JavaScript-Mitteln vor unbefugtem Zugriff zu schützen, gibt es prinzipiell zwei Möglichkeiten:
| Die Seite wird vollständig von JavaScript erzeugt.
| Irgendeine Form der Authentifizierung wird ausgeführt; schlägt diese fehl, wird der Benutzer auf eine Fehlerseite weitergeleitet.
All diese Methoden haben eines gemeinsam: Sie funktionieren ohne JavaScript entweder gar nicht, oder sie können durch das Abschalten von JavaScript ausgehebelt werden (weil dann beispielsweise die Weiterleitung nicht mehr funktioniert). Wir werfen in diesem Abschnitt nur einen Blick auf diejenigen Möglichkeiten, die eine Seite direkt mit JavaScript schützen. Um einen eingeloggten Benutzer festzustellen, verwenden wir Cookies. ### 28.2.1 Passwort im Quelltext Cookies können dazu verwendet werden, Textdaten lokal auf dem Rechner des Benutzers zu speichern. Mehr dazu erfahren Sie in Kapitel 12. In den folgenden Listings werden wir einige der Hilfsfunktionen verwenden, die in diesem Kapitel erstellt worden sind – unter anderem Funktionen zum Setzen und Auslesen von Cookies:
| Mit cookie_lesen() lesen Sie den Wert eines Cookies aus.
| Mit cookie_setzen() setzen Sie einen Cookie.
Der entsprechende Cookie darf nur dann gesetzt werden, wenn das Passwort korrekt eingegeben worden ist. Dies ist eine weitere Schwäche des Algorithmus, denn wie Sie in Kapitel 27 gesehen haben, lässt sich der eigentliche Quellcode nicht schützen, weswegen ein finsterer Geselle mit ein wenig Mühe das Passwort herausfinden kann. Für das folgende Beispiel verwenden wir wieder die Funktion codeschutz_encode(). Das Passwort steht dann verschlüsselt, aber mit ein wenig Aufwand knackbar, im Quelltext:
    <html>
    <head>
    <title>Top Secret</title>
    <script type="text/javascript"><!--
    function cookie_setzen() {
       var anzParameter = cookie_setzen.arguments.length;
       var parameter = cookie_setzen.arguments;
       var name = parameter[0];
       var value = (anzParameter >= 2) ? parameter[1] : "";
       value = escape(value); // URL-Codierung
       var expires = (anzParameter >= 3) ? parameter[2] : null;
       if (expires != null) {
          if (expires.toGMTString) {
             expires = expires.toGMTString();
          }
       }
       var domain = (anzParameter >= 4) ? parameter[3] : null;
       var path = (anzParameter >= 5) ? parameter[4] : null;
       if (path != null) {
          path = escape(path); // Sonderzeichen umwandeln
       }
       var secure = (anzParameter >= 6) ? parameter[5] : null;
       var c = name + "=" + escape(value);
       if (expires != null) {
          c += "; expires=" + expires;
       }
       if (domain != null) {
          c += "; domain=" + domain;
       }
       if (path != null) {
          c += "; path=" + path;
       }
       if (secure) {
          c += "; secure";
       }
       document.cookie = c;
    }

    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;
    }

    function check(f){
       var pwd = f.elements["pass"].value;
       if (codeschutz_encode(pwd, 1) == "hfifjn") {
          //"geheim"
          cookie_setzen("Login", "ok");
          location.href = "geheim.html";
       }
    }
    //--></script>
    </head>
    <body>
    <h1>Passwortabfrage</h1>

    <form onsubmit="check(this); return false;">
       <input type="password" name="pass" />
       <input type="submit" value="Login" />
    </form>
    </body>
    </html>
Die Datei geheim.html (und alle anderen, geschützten Seiten) müssen dann den folgenden Code enthalten, der überprüft, ob der Cookie gesetzt ist. Falls nicht, wird der Benutzer auf eine Fehlerseite geschickt:
    <html>
    <head>
    <title>Top Secret</title>
    <script type="text/javascript"><!--
    function cookie_lesen(name) {
       var i = document.cookie.indexOf(name + "=");
       var c = "";
       if (i > –1) {
          var ende = document.cookie.indexOf("; ",
                     i+name.length+1);
          if (ende == –1) {
             ende = document.cookie.length;
          }
          c = document.cookie.substring(i+name.length+1, ende);
       }
       return unescape(c);
    }

    if (cookie_lesen("Login") != "ok") {
       location.href = "fehler.html";
    }
    //--></script>
    </head>
    <body>
    Geheime Inhalte ...
    </body>
    </html>
Die Datei fehler.html enthält eine Fehlermeldung. Sie ist hier nicht angeführt, da sie aus dem JavaScript-Blickwinkel nichts Neues bringt. Sie müssen die Datei also selbst erstellen und mit einer aussagekräftigen Fehlermeldung versehen. ### 28.2.2 Mit Java Wenn Sie das Passwort nicht im Klartext (oder nur schwach verschlüsselt, wie oben gesehen) im Quelltext unterbringen möchten, steht Ihnen eine (zugegebenermaßen etwas extravagante) Alternative zur Verfügung. Das Passwort wird in einem (unsichtbaren) Java-Applet gespeichert. Wie Sie vielleicht wissen (etwa nach Lektüre von Kapitel 24), können Sie von JavaScript aus alle als public deklarierten Methoden eines Java-Applets aufrufen. Sie benötigen also ein Java-Applet, das Folgendes erledigt:
| Es speichert das Passwort in einer Variablen.
| Es bietet eine Methode an, die eine Zeichenkette mit dem Passwort vergleicht und dementsprechend true oder false zurückliefert.
Die letztgenannte Methode wird dann vom JavaScript-Code aus aufgerufen. Liefert sie true zurück, wird der Cookie gesetzt (ansonsten nicht). Beginnen wir mit dem Java-Applet. Wir werden es nicht en detail erläutern, schließlich halten Sie ein JavaScript-Buch in den Händen, kein Java-Buch. Mit Ihren JavaScript-Kenntnissen werden Sie aber nicht allzu viele Probleme haben, das Listing zu verstehen.
    import java.applet.*;
    import java.awt.*;
    public class login extends Applet {
      private String passwort = "geheim"; // das Passwort
       public void paint(Graphics g) {
       }
       public boolean checkLogin(String versuch) {
          return (versuch.equals(passwort));
       }
    }
Kompilieren Sie diese Java-Datei mit javac login.java, um die Datei login.class zu erhalten. Binden Sie dann das Applet in eine HTML-Seite ein. Mit JavaScript können Sie dann die Funktion checkLogin() aufrufen:
    <html>
    <head>
    <title>Top Secret</title>
    <script language="JavaScript"><!--
    function cookie_setzen() {
       var anzParameter = cookie_setzen.arguments.length;
       var parameter = cookie_setzen.arguments;
       var name = parameter[0];
       var value = (anzParameter >= 2) ? parameter[1] : "";
       value = escape(value); // URL-Codierung
       var expires = (anzParameter >= 3) ? parameter[2] : null;
       if (expires != null) {
          if (expires.toGMTString) {
             expires = expires.toGMTString();
          }
       }
       var domain = (anzParameter >= 4) ? parameter[3] : null;
       var path = (anzParameter >= 5) ? parameter[4] : null;
       if (path != null) {
          path = escape(path); // Sonderzeichen umwandeln
       }
       var secure = (anzParameter >= 6) ? parameter[5] : null;
       var c = name + "=" + escape(value);
       if (expires != null) {
          c += "; expires=" + expires;
       }
       if (domain != null) {
          c += "; domain=" + domain;
       }
       if (path != null) {
          c += "; path=" + path;
       }
       if (secure) {
          c += "; secure";
       }
       document.cookie = c;
    }
    function check(f){
       var pwd = f.elements["pass"].value;
       var applet = document.loginApplet;
       if (applet && applet.checkLogin
                  && applet.checkLogin(pwd)) {  // Passwort ok?!
          cookie_setzen("Login", "ok");
          location.href = "geheim.html";
       }
    }
    //--></script>
    </head>
    <body>
    <h1>Passwortabfrage</h1>
    <form onsubmit="check(this); return false;">
       <input type="password" name="pass" />
       <input type="submit" value="Login" />
    </form>
    <applet code="login.class" name="loginApplet"
            width="1" height="1"></applet>
    </body>
    </html>
Die Überprüfung, ob ein Cookie vorliegt, nehmen Sie dann auf den geschützten Seiten wie gehabt vor. Damit haben Sie einen geschützten Bereich mit JavaScript erstellt, der aber wie folgt ausgehebelt werden kann:
| durch Deaktivierung von JavaScript
| durch manuelles Setzen des Cookies (was leider einfacher ist als man denkt)
<< 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