HTML, CSS und JavaScript
Inhaltsverzeichnis
1 Einführung
Dieses Dokument beinhaltet Verweise auf Quellen rund um HTML, CSS und JavaScript und soll ohne Anspruch von Vollständigkeit einen Einstieg in ausgewählte Aspekte dieser Themen ermöglichen.
1.1 Lernziele
- Separation of Concerns am Beispiel HTML, CSS, JavaScript erläutern
- HTML, CSS und JavaScript am Beispiel erläutern und anpassen
- Exemplarische Web-Seiten über Web-Server in Docker testen
- Zielsetzungen von Same-Origin Policy und Cross-Origin Resource Sharing erläutern
- XSS als Beispiel für Injection-Angriffe erläutern
- (Mindestens) ein Beispiel für unbeabsichtigte Ausführung von Cross-Origin JavaScript angeben und beheben
- (Über gesamtes VM hinweg: Eignung von HTML für OER diskutieren)
1.2 Verschiedene Einstiege in die Thematik
Für einen ersten Einstieg könnte das im folgenden Unterabschnitt dargestellte Demo-HTML-Fragment dienen. Alternativ überspringen Sie den Unterabschnitt zunächst und kommen für Tests später zurück.
1.3 Demo-HTML-Fragment
Das folgende HTML-Fragment ist (dank des Plugins Klipse) im oberen Bereich editierbar und zeigt im unteren Bereich die vom Browser dargestellte Ansicht.
<style>
h1.demo-headline { color: blue; }
i { color: darkblue; }
.green { color: green; }
#demo-id { color: red; }
</style>
<h1 class="demo-headline">Hello World!</h1>
<p class="green">This is a <i>paragraph</i> of text with class “green”.</p>
<p id="demo-id">This is another paragraph with id “demo-id”.</p>
Ganz grob bestehen HTML-Dokumente aus Elementen, die durch öffnende
und schließende Tags definiert werden. Das Beispiel-Fragment
beginnt mit dem Element style
(zwischen öffnendem Tag <style>
und
schließendem Tag </style>
), das zur Definition von CSS-Regeln
dient, die das Layout bestimmen (Schriftart, -größe, -farbe, Abstände
usw.). Auf die Stildefinition folgen eine Überschrift der ersten
Gliederungsebene (h1
) und zwei Paragraphen (p
).
CSS-Regeln werden in ihrer eigenen Sprache definiert. Hier sehen Sie
verschiedene Farben, die durch unterschiedliche Selektoren an Teile
des HTML-Dokuments gebunden werden. Eine Regel legt fest, dass
Element i
in Dunkelblau dargestellt wird. Zudem können Regeln für
Klassen definiert werden, deren Namen ein Punkt vorangestellt wird
(hier green
), für eindeutig identifizierte Elemente (mit einem
Hashtag wie bei #demo-id
), für Kombinationen (Überschriften der
Ebene 1 und der Klasse demo-headline
durch h1.demo-headline
) und
vieles mehr.
Ändern Sie obiges Dokument, fügen Sie z. B. testweise eine
Überschrift der Ebene 2 hinzu, und ändern Sie den Stil des Elements
i
. Beachten Sie, dass CSS-Vorgaben aus dem umgebenden Dokument in
Kombination mit Ihren CSS-Angaben wirken (Änderungen an i
beeinflussen beispielsweise alle kursiven Elemente im Text). Was Sie
alles mit CSS ändern können, erfordert Ihre eigene Recherche.
Verändern Sie etwa die Schriftgröße bestimmter Elemente mit einer
eigenen CSS-Klasse.
2 HTML
Die Hypertext Markup Language (HTML) ist die Sprache (genauer: Sprachfamilie) des Web, die typischerweise in Kombination mit CSS und JavaScript zum Einsatz kommt. Das selfHTML-Wiki ist die deutschsprachige OER rund um HTML.
Lesen Sie im selfHTML-Wiki, wie mit diesen drei Sprachen Inhalt, Präsentation und Verhalten getrennt werden, und erklären Sie danach was unter „Separation of Concerns“ verstanden wird, welche Vorteile die Einhaltung dieses Prinzips verspricht und wie es mit der Trennung von Inhalt, Präsentation und Verhalten im Kontext von HTML, CSS und JavaScript zusammenhängt.
Wenn Sie noch keine Erfahrung mit HTML haben, empfehle ich diesen HTML-Einstieg im selfHTML-Wiki, der auch Grundlagen von CSS behandelt. Weitergehende Details zu CSS finden sich dann im Einstieg in CSS. Um die Grundlagen von JavaScript zu erlernen, können Sie das Tutorial JavaScript Hero absolvieren. (Im Kontext dieses Vertiefungsmoduls ist das allerdings nicht nötig. Die weiter unten angegebenen Texte des selfHTML-Wiki zum DOM sollten Ihnen helfen, die folgenden Aufgaben zu lösen.)
Im Zuge der Web-Entwicklung können Sie beispielsweise per Docker einen Web-Server auf dem eigenen Rechner betreiben, der während der Entwicklung Ihre Web-Ressourcen ausliefert.
Zudem existieren Online-Editoren, die gleichzeitig sowohl den Quelltext einer Web-Seite als auch ihre Browser-Darstellung live anzeigen. In sehr einfacher Form funktioniert das z. B. in HTML-Dokumenten, in denen das Plugin Klipse eingebettet ist. Umfangreichere Funktionalität bieten etwa JS Bin (v4 als freie Software) oder proprietäre Alternativen wie JSFiddle (Hello-World-Beispiel von selfHTML) und CodePen.
3 JavaScript, Same- und Cross-Origin
JavaScript ist die Programmiersprache des Web. JavaScript-Programme können in HTML-Dokumente eingebunden und dann vom Browser ausgeführt werden. Sie können dann z. B. das HTML-Dokument dynamisch anpassen oder im Hintergrund Daten mit Servern im Internet austauschen. Die Möglichkeiten sind nahezu unbegrenzt und können sowohl für gute Zwecke ge- als auch Kriminelles missbraucht werden.
Als Schnittstelle zwischen JavaScript und HTML dient das Document Object Model (DOM), zu dem das selfHTML-Wiki eine Kurzerläuterung und ein etwas längeres Tutorial liefert.
In der Regel befolgen Browser die sogenannte
Same-Origin-Policy,
nach der beispielsweise JavaScript von einer Web-Seite nur dann auf
das DOM einer zweiten Web-Seite zugreifen darf, wenn beide Web-Seiten
denselben Ursprung (engl. origin, deutsch manchmal auch irreführend
Domäne) aufweisen, ihre URLs also (1) dasselbe Schema (z. B. beide
http
oder beide https
), (2) denselben Servernamen (IP-Adresse oder
Domänenname, z. B. www.uni-muenster.de
) und (3) denselben Port
(z. B. Port 8080) aufweisen. Durch diese Einschränkung der
Same-Origin-Policy soll verhindert werden, dass schützenswerte Inhalte
einer Web-Seite (z. B. Cookies) von einer anderen (bösartigen)
Web-Seite ausgelesen oder verändert werden.
Um Ressourcen aus verschiedenen Domänen zu kombinieren und die Zusammenarbeit zwischen verschiedenen Ursprüngen gezielt zuzulassen, gibt es einerseits den Ansatz Cross-Origin Resource Sharing (CORS). Andererseits stellt die JavaScript-Methode Window.postMessage() ein Beispiel für die sichere Cross-Origin-Kommunikation zwischen Window-Objekten (z. B. Seite und Pop-up oder iframe) dar, das in diesem Blog-Beitrag aufgegriffen wird. Unter anderem verweist der Blog-Beitrag auf eine Live-Demo auf CodePen. Bearbeiten Sie zu dieser Demo bitte folgende Aufgaben!
- Die Live-Demo funktioniert bereits länger nicht mehr. Welches offensichtliche Problem besteht? Wenn Sie den Quelltext ansehen, erkennen Sie vielleicht auch ein subtileres Problem, das die Demo bereits im letzten Jahr hat scheitern lassen.
- In Learnweb finden Sie ein ZIP-Archiv mit auf der Demo basierendem Code. Vergewissern Sie sich, dass Sie den Code verstehen und testen ihn dann, indem Sie mit Docker zwei Web-Server (auf unterschiedlichen Ports, die Sie dem Quelltext entnehmen) nutzen. Geben Sie an, wie Sie die Server starten und was Sie zum Test im Browser gemacht haben.
4 Sicherheit
Programmierung im Web-Kontext ist anfällig für diverse Sicherheitslücken, wozu das Open Web Application Security Project (OWASP) zahlreiche OER bereitstellt (vgl. „List of Attacks“).
Lesen Sie, was unter
Injection Theory
verstanden wird, in deren Rahmen Cross Site Scripting (XSS)
(Erläuterungen
bei OWASP,
Wikipedia-Artikel)
erklärt werden kann. Zum Schutz vor XSS liefert
OWASP ein Cheat Sheet.
Beachten Sie, dass beispielsweise die
Dokumentation zur Java-Script-Methode postMessage()
folgenden Hinweis enthält: „always verify the syntax of the received message“
Beantworten Sie folgende Fragen.
- Skizzieren Sie kurz das Ziel von XSS-Angriffen sowie grundlegende Ideen ihrer Abwehr. Sie sollten dabei nicht die Punkte des Cheat Sheet von OWASP wiedergeben, sondern versuchen, so etwas wie eine allgemeine Philosophie zu formulieren.
- Versuchen Sie, Cross-Origin-JavaScript im Beispiel zu
postMessage()
zur Ausführung zu bringen (mit dem modifizierten Code in Learnweb). Geben Sie im Erfolgsfall an, wie der Angriff aussieht und welche Änderungen nötig sind, um den Angriff abzuwehren. Erklären Sie im Misserfolgsfall, was Sie ausprobiert haben bzw. an welchen Stellen Sie gesucht haben. - Wie beurteilen Sie diese Lerneinheit zu HTML, CSS und JavaScript vor dem Hintergrund Ihres persönlichen Vorwissens bezüglich Schwierigkeit und Aufwand?
5 Fazit
Web-Entwicklung profitiert von zahlreichen Kenntnissen, unter denen dieses Dokument nur eine subjektive Auswahl angerissen hat. Gar nicht angesprochen wurden etwa Barrierefreiheit, SEO, Optimierung für mobile Geräte, die auch im selfHTML-Wiki zur Sprache kommen; zum Thema Sicherheit wurde bereits OWASP als ausgiebige Quelle empfohlen.
Lizenzangaben
Dieses Dokument ist eine OER im Vertiefungsmodul „OER“. Quelldateien stehen unter freien Lizenzen auf GitLab.
Soweit nicht anders angegeben unterliegt das Werk „HTML, CSS und JavaScript“, © 2018-2020 Jens Lechtenbörger, der Creative-Commons-Lizenz CC BY-SA 4.0.
Erzeugt: 2021-05-21 Fri 13:38