JavaScript
Gefahren und Anwendungsmöglichkeiten durch JavaScript

 

1 Allgemeines

1.1 Entstehung

JavaScript wurde 1995 ursprünglich unter dem Namen LifeScript von Netscape Communications entwickelt. Wahlweise direkt im HTML-Dokument oder in einer separaten Datei notiert, wird der Code zur Laufzeit vom Web-Browser interpretiert. Mit Hilfe von JavaScript kann man somit statischen HTML-Dokumenten eine gewisse Dynamik verleihen (‚LifeScript'). Da die neue Sprache zusammen mit der Firma Sun präsentiert wurde, änderte man den Namen aus Marketing-Gründen zu ‚JavaScript'. Diese Bezeichnung ist leicht irreführend. Zwar orientiert sich JavaScript gerade in der Syntax stark an Java (von Sun), sonst zeigen die beiden Programmiersprachen allerdings wenig Gemeinsamkeiten auf. Folgende Tabelle soll kurz die wichtigsten Unterschiede zwischen Java und JavaScript verdeutlichen:

JavaScript Java
einfache, prozeduale Skriptsprache

vollwertige, komplexe Programmiersprache

zur Laufzeit interpretiert bei der Entwicklung compiliert
objekt-basiert, damit keine Vererbung objekt-orientiert, damit Vererbung von Eigenschaften
direkt in das HTML-Dokument integrierbar getrennt vom HTML-Dokument
keine Typ-Deklaration der verwendeten Variablen notwendig Typ-Deklaration der verwendeten Variablen notwendig
Objekt-Referenzen werden erst zur Laufzeit geprüft Objekt-Referenzen werden bereits während Compilierung überprüft


Parallel zu dem von Netscape entwickelten und vom Netscape Navigator unterstützten ‚JavaScript', integrierte Microsoft 1996 ebenfalls einen Interpreter in den Internet Explorer. Die Sprache, die auf JavaScript 1.0 basiert, wird von Microsoft als JScript bezeichnet. Trotz gemeinsamer Wurzel unterscheiden sich die beiden Sprachen teilweise erheblich, so dass Entwickler, die portabel programmieren wollen, zum Teil erheblichen Mehraufwand betreiben müssen. Inzwischen wurden allerdings wesentliche Kernbereiche von JavaScript durch die ECMA (European Computer Manufacturers Association) zu dem gemeinsamen Nenner ECMAScript zusammengefasst. So konnten durch den ECMA-262 Standard etliche Inkompatibilitätsprobleme beseitigt werden.



1.2 Elemente

1.2.1 Standardelemente

Als flexibles Entwicklungswerkzeug verfügt JavaScript über die wesentlichen Elemente einer Programmiersprache:

1.2.2 Standardobjekte

JavaScript enthält bereits eine Reihe an Standardobjekten, die sich im Zusammenhang mit der Programmierung von WWW-Seiten als recht nützlich erwiesen haben. Zu jedem Objekt existieren für die jeweilige Klasse typische Eigenschaften und Methoden. Folgende Objekte sollen exemplarisch hervorgehoben werden:

1.2.3 Abbildung der Benutzersituation auf ein hierarchisches Objektmodell

In der Regel verwendet man JavaScript zur Manipulation des Browserverhaltens und zur dynamischen Veränderung von HTML-Dokumenten. Beim Laden eines Dokumentes wird durch die JavaScript-Runtime-Engine eine Hierarchie von JavaScript-Objekten angelegt, die Inhalte und Struktur des Dokuments wiederspiegelt. Innerhalb dieser Hierarchie werden abhängige Objekte über Eigenschaften übergeordneter Objekte angesprochen. Normalerweise beziehen JavaScript-Objekte dabei ihre Namen von den ‚name'-Attributen der entsprechenden HTML-Tags des Dokuments. So wird z.B. für jedes <FORM>-Tag eines HTML-Dokumentes ein form-Objekt erzeugt. Auf das i-te form-Objekt innerhalb des Dokuments wird dann über document.Forms[i-1] zugegriffen.Jeder geladenen Seite sind folgende Objekte zugeordnet:

1.2.4 Ereignisse (Events)

Die meisten JavaScript-Anweisungen werden bereits beim Laden eines Dokuments ausgeführt. Allerdings bietet einem das ereignisgesteuerte Programmiermodell (event-driven programming model) von JavaScript weit mehr Möglichkeiten. Interaktionen des Benutzers werden erkannt und führen somit zur Erzeugung von Ereignissen. Der Browser reagiert mit dem Aufruf einer entsprechenden Ereignisbehandlungsroutine (event handler). Mit Hilfe von Ereignissen kann man somit statische HTML-Seiten zu dynamischen Oberflächen aufwerten. Dies bietet dem Benutzer ein gewisses Maß an Interaktivität und stellt somit den eigentlichen Zweck von JavaScript dar.
Diese Events sind neben Eigenschaften und Methoden im Document-Object-Modell von JavaScript definiert, welches für viele HTML-Objekte existiert. Der Browser kann auf sie mit der Ausführung von JavaScript-Code reagieren. Die ‚Event-Handler' werden dann als Attribut im zugehörigen HTML-Tag mittels JavaScript-Anweisungen definiert. Der Code kann dann wahlweise direkt im Attribut stehen oder durch einen Funktionsaufruf ausgeführt werden. Dazu muss die jeweilige Funktion bereits definiert sein.

Bsp.: <INPUT type="button" value="Hello" onClick="alert('Hello World!');">
Es wird also ein Knopf mit der Beschriftung 'Hello' generiert. Wird dieser angeklickt, so öffnet sich unter Windows ein Dialogfenster mit dem Text „Hello World!" als Meldung und dem Button „OK".

Bsp.: <INPUT type="button" value="Hello" onClick="HelloWorld()">
Wieder wird ein Knopf mit der Beschriftung 'Hello' generiert. Wird dieser angeklickt, so wird dieses Mal die Funktion HelloWorld aufgerufen. Dafür sollte sie dann bereits im Kopf des Dokuments definiert sein.

Häufig verwendete Event-Handler sind z.B.:

onAbort bei Abbruch
onBlur beim Verlassen von Texteingabefeldern
onChange bei geänderten Inhalten eines Formularelements
onClick beim Anklicken eines Formularelements oder Links
onDblClick bei doppeltem Anklicken
onError im Fehlerfall
onFocus beim Positionieren des Cursors auf einem Formularelement
onKeyDown bei gedrückter Taste
onKeyPress bei gedrückt gehaltener Taste
onKeyUp bei losgelassener Taste
onLoad beim Laden eines Dokuments
onMousedown bei gedrückter Maustaste
onMousemove bei weiterbewegter Maus
onMouseOut beim Verlassen eines def. Bereichs mit der Maus
onMouseOver beim Eintreten der Maus in einen def. Bereich
onMouseUp bei losgelassener Maustaste
onReset beim Zurücksetzen von Formularfeldern
onSelect bei Wahl in Select-Menüs
onSubmit beim Versenden von Formulardaten
onUnload beim Verlassen des Dokuments
javascript: beim Anklicken eines entsprechenden Links

 

1.3 Einbettung

Client-seitiges JavaScript kann auf sechs grundsätzlich verschiedene Arten in HTML-Dokumente eingebettet werden [Flan 98b S.211 ff., Agou99].

Bsp. zum <SCRIPT>-Tag:

<HTML>
  <HEAD><TITLE>Hello World Programm</TITLE>
    <SCRIPT type="text/javascript"> // Einleiten Bereichs für JavaScript in einer HTML-Datei
    <!-- // einen HTML-Kommentar einleiten -> aeltere Browser
      alert("Hello World!"); // Dialogfenster mit dem Text „Hello World!" als Meldung und dem Button „OK"
    //--> // einen HTML-Kommentar abschliessen
    </SCRIPT>
  </HEAD>
  <BODY></BODY>
<HTML>


1.4 Sicherheitsmodelle

Netscape entwickelte mehrere Sicherheitsmodelle, die den verschiedenen Gefährdungen durch JavaScript-Programme entgegentreten sollen. Drei Modelle sollen kurz vorgestellt werden.


2 Vorteile und Anwendungen

2.1 Vorteile von JavaScript

2.2 Anwendungsmöglichkeiten von JavaScript

Exemplarisch sollen einige potentielle Einsatzgebiete von JavaScript vorgestellt werden.


3 Nachteile und Gefahren durch JavaScript

3.1 Nachteile von JavaScript


3.2 Gefahren durch JavaScript

Um die Gefährdungen, die bei der Ausführung von JavaScript-Programmen entstehen, beherrschen zu können, wurden von Netscape verschiedene Sicherheitsmodelle entwickelt. Dazu gehören die „Same Origin Policy", „Data Tainting" und die „Signed Script Policy". Als Skriptsprache für die Internetseitenprogrammierung konzipiert, wurde absichtlich auf Sprachkonstrukte für die Graphikbearbeitung und für Datei- oder Netzwerkoperationen verzichtet. Sonst ist JavaScript allerdings eine vollständige Programmiersprache, die auch gewisse ‚Gefahren' mit sich bringt. Im folgenden werden einige davon aufgezählt.


Das Sicherheitskonzept von JavaScript ist im Allgemeinen recht zuverlässig, allerdings werden immer wieder schwere Sicherheitslücken und Bugs bekannt, die Angriffe gegen die Privatsphäre des Benutzers zulassen. So können mitunter Dateien oder die Verzeichnisstruktur ausgelesen oder JavaScript-Code in lokale Dateien eingeschleust werden. Ein weiterer bekannter Bug ermöglicht das Auslesen der Zwischenablage von Windows.




4 Quellen


Einführungen in JavaScript


http://selfhtml.teamone.de/javascript/index.htm

SelfHTML beinhaltet eine sehr anschauliche und ausführliche Einführung in JavaScript.



http://www.rrzn.uni-hannover.de/buecher/JavaScript.html

Eine gute Alternative zu SelfHTML in Papierform wird vom Rechenzentrum der Universität Hannover Mitgliedern (das sind Studierende und Bedienstete) von Fachhochschulen und Hochschulen zur Verfügung gestellt.



http://www.teco.edu/lehre/webe/webev210100/index.htm

Folien zur Vorlesung 'Web Engineering' von Albrecht Schmidt.



http://www.javascript.seite.net/index.bak.html

Kakao und Kekse
Das deutsche JavaScript Verzeichnis





Anwendungsbeispiele


http://www.javaman-online.de/java/script.htm

Zahlreiche Anwendungsbeispiele



http://www.grammiweb.de/java/indexsonstiges.shtml

Eine umfangreiche Sammlung an JavaScript-Beispielen.





Sonstiges


http://www.ecma.ch/ecma1/stand/ecma-262.htm

3rd edition (December 1999)
This Standard defines the ECMAScript scripting language.



http://www.heise.de/ct/browsercheck/

Der c't - Browsercheck

http://www.heise.de/ct/browsercheck/n4demo.shtml
http://www.heise.de/ct/browsercheck/e5demo.shtml






Sicherheit


- Vorname Name -
Risiken für Intranets durch Java und JavaScript aus dem Internet
Risiken, Gegenmaßnahmen, Restriktionen
Ulm, Diplomarbeit, 1999



http://www.uni-muenster.de/WWW/Sicherheit.html

Links zu einzelnen Sicherheitsloechern





Linkverzeichnisse


http://www.tu-berlin.de/www/software/java.shtml

Linkverzeichnis zu Java und JavaScript



http://www.tu-berlin.de/www/software/security.shtml

Linkverzeichnis zum Thema Sicherheit