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].
Direkte Einbettung von JavaScript-Code in die HTML-Seite Verweis auf eine separate Datei oder komprimierte Archiv-Datei mit
JavaScript-Code
<SCRIPT LANGUAGE="JavaScript"> Code </SCRIPT>
<SCRIPT SCR="Code.js"> </SCRIPT>
Ereignisbehandlungsroutinen werden als Wert eines HTML-Attributs
wie z.B. onClick, onChange oder onMouseOver angegeben und können beliebigen
Code enthalten, der ausgeführt wird, sobald das spezifizierte Ereignis
auftritt. Ereignisbehandlungsroutinen ermöglichen flexible Reaktionen
auf Benutzeraktionen.
<FORM> <INPUT type=text onChange="Code"> </FORM>
Sobald die betreffende URL geladen wird, werden alle auf den
Pseudo-Protokollidentifikator "javascript:" folgenden Statements
vom JavaScript-Interpreter als Java-Script-Code ausgeführt. javascript:"-URLs
dienen ähnlich wie Ereignisbehandlungsroutinen der flexiblen Reaktion
auf Benutzereingaben und das Auftreten von Ereignissen
<A href="javascript:Code> Das ist ein javascript-URL Test
</A>
Style Sheets, spezielle Formatierungsvorgaben für die Darstellung
einer Seite im Client, können seit Netscape Navigator 4.0 alternativ
zu der weitverbreiteten CSS (cascading style sheet)-Syntax auch in JavaScript
formuliert werden. Der die Formatierungen enthaltende JavaScript-Code kann
entweder direkt in die Seite eingebunden oder in Form eines Verweises auf
eine JavaScript-Datei aufgerufen werden. Microsoft Internet Explorer unterstützt
JavaScript-Style Sheets nicht.
Direkte Einbettung in <STYLE>-Tag
<STYLE type=text/javascript> Code </STYLE>
Verweis auf JavaScript-Datei in <LINK>-Tag
<LINK href='code.js' rel=styleshett type=text/javascript>
Seit Netscape Navigator 3 kann JavaScript-Code in Form eines
sogenannten JavaScript-Entities als Wert von HTML-Attributen erscheinen.
JavaScirpt-Entities dienen dazu, bedingten HTML-Code zu verfassen und können
beliebigen JavaScript-Code enthalten. Microsoft Internet Explorer unterstützt
JavaScript-Entities nicht.
<BODY background="&{JavaScript-Code};">
Seit Netscape Navigator 4.0 besteht die Möglichkeit, mit
Hilfe von JavaScript-Entities bedingte HTML-Kommentare zu formulieren. Ergibt
die Auswertung des JavaScript-Ausdrucks wahr", so wird die Kommentierung
ignoriert und der Inhalt des Kommentars normal ausgewertet. Ist das Ergebnis
der Auswertung des JavaScirpt-Ausdrucks falsch", so wird der
Inhalt des Kommentars vom Browser ignoriert. Microsoft Internet Explorer
unterstützt bedingte Kommentare nicht.
<!-- &{JavaScript-Code} -->
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.
SelfHTML beinhaltet eine sehr anschauliche und ausführliche Einführung in JavaScript.
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.
Folien zur Vorlesung 'Web Engineering' von Albrecht Schmidt.
Kakao und Kekse
Das deutsche JavaScript Verzeichnis
Zahlreiche Anwendungsbeispiele
Eine umfangreiche Sammlung an JavaScript-Beispielen.
3rd edition (December 1999)
This Standard defines the ECMAScript scripting language.
Der c't - Browsercheck
http://www.heise.de/ct/browsercheck/n4demo.shtml- Vorname Name -
Risiken für Intranets durch Java und JavaScript aus dem Internet
Risiken, Gegenmaßnahmen, Restriktionen
Ulm, Diplomarbeit, 1999
Links zu einzelnen Sicherheitsloechern
Linkverzeichnis zu Java und JavaScript
Linkverzeichnis zum Thema Sicherheit