Webtechnik: HTML, CSS und Formulare
Für das Schulfest gibt es eine Anmeldeseite. Du tippst deinen Namen ein, klickst auf „Anmelden“, und kurz danach steht er in der Liste der Organisatorin. Was passiert dazwischen? Wie kommen die Eingaben zum Server, und wie landen sie in einer Datenbank, ohne dass jemand sie beschädigen kann?
HTML und CSS kennst du aus der Mittelstufe. Hier gehst du genauer vor: Aufbau einer Seite, Layout mit Raster, Formulare, Seiten aus einer Datenbank und die Anmeldung von Nutzern.
HTML5: Grundgerüst, Elemente, Attribute und Hyperlinks
HTML beschreibt die Struktur einer Seite durch Elemente. Ein Element besteht aus Anfangs-Tag, Inhalt und End-Tag, zum Beispiel . Manche Elemente haben keinen Inhalt, etwa und . Attribute stehen im Anfangs-Tag als Paare und bestimmen das Element näher. Jede HTML5-Seite hat dieses Grundgerüst:
| Zeile | Einrückung | Anweisung |
|---|---|---|
| 1 | 0 | |
| 2 | 0 | |
| 3 | 1 | |
| 4 | 2 | |
| 5 | 2 | |
| 6 | 1 | |
| 7 | 1 | |
| 8 | 2 | |
| 9 | 2 | |
| 10 | 1 | |
| 11 | 0 |
Zeile 1 meldet HTML5. Das Element enthält mit Angaben über die Seite (Zeichensatz, Titel im Tab) und mit dem sichtbaren Inhalt. Ein Hyperlink ist das Element . Sein Attribut nennt das Ziel.
Dokumentbaum
Der Browser liest den Text und baut daraus den Dokumentbaum (DOM). Jedes Element ist ein Knoten und liegt in genau einem Elternelement. Elemente im selben Elternelement sind Geschwister. Die Wurzel ist . CSS und Skripte greifen über den Baum auf Elemente zu. Für das Gerüst oben (ohne die Textknoten) gilt:
| Element | Liegt direkt in |
|---|---|
| html | Wurzel |
| head, body | html |
| meta, title | head |
| h1, p | body |
| a | p |
Es sind 8 Elemente.
Wohin führt der Link?
Wohin führt der Link?
Die Seite liegt unter https://schule.example/fest/index.html. Wohin führen die Werte , und ?
Ein Pfad ohne Protokoll ist relativ zur Adresse der aktuellen Seite.
- steht im selben Ordner: https://schule.example/fest/programm.html.
- geht einen Ordner nach oben: https://schule.example/start.html.
- bleibt auf derselben Seite und springt zum Element mit .
Ein absoluter Link enthält die ganze Adresse mit Protokoll.
CSS3: Selektoren und Kaskade
CSS trennt das Aussehen von der Struktur. Eine Regel hat die Form . Der Selektor wählt Elemente aus:
- wählt alle Elemente (Typselektor).
- wählt Elemente mit (Klasse, mehrfach verwendbar).
- wählt das Element mit (die ID gibt es auf einer Seite nur einmal).
- wählt alle , die irgendwo in einem liegen. wählt nur , die direkt in einem liegen.
- wählt einen Link, über dem die Maus steht (Pseudoklasse).
Treffen mehrere Regeln ein Element mit verschiedenen Werten, gewinnt die spezifischere: ID vor Klasse und Pseudoklasse vor Typ. Bei gleicher Spezifität gilt die spätere Regel. Manche Eigenschaften, etwa die Schriftfarbe, erben Kinder vom Elternelement. Hat ein die Klasse und die ID , schlägt die Regeln und .
CSS3: Grid-Layout
Mit wird ein Container zum Raster. legt die Spalten fest, die Zeilen. Maße sind feste Größen () oder Anteile (): Ein Anteil ist ein Teil des Platzes, der nach Abzug der festen Größen und der Abstände () übrig bleibt. Kindelemente füllen die Zellen der Reihe nach. Mit reicht ein Element von Spaltenlinie 1 bis 3, also über zwei Spalten.
Spaltenbreiten im Raster
Spaltenbreiten im Raster
Ein Container ist 940 Pixel breit und hat sowie . Wie breit sind die drei Spalten?
Bei drei Spalten gibt es zwei Abstände: 2 · 20 = 40 Pixel. Für die Anteile bleiben 940 - 100 - 40 = 800 Pixel. Es sind 1 + 3 = 4 Anteile, ein Anteil ist also 800 : 4 = 200 Pixel. Die Spalten sind 100, 200 und 600 Pixel breit.
Formulare und Versand der Eingabedaten
Ein Formular ist ein Element mit Eingabefeldern. Das Attribut nennt die Adresse, die die Daten verarbeitet, die Art des Versands. Eingaben sind mit (etwa , , , , ), und . Ein beschriftet ein Feld. Das Attribut ist der Schlüssel: Beim Absenden schickt der Browser Paare an den Server.
Bei GET hängen die Paare an der URL (wie die Anfrage in der URL aus der Mittelstufe). Sie sind sichtbar, stehen im Verlauf und eignen sich für Abfragen ohne Folgen, etwa eine Suche. Bei POST stehen sie im Körper der Anfrage und nicht in der URL. POST nimmt man für Eingaben, die etwas verändern, wie Anmeldung oder Passwort. Sonderzeichen werden prozentkodiert: ein Leerzeichen als oder , ein ä als .
Was sendet der Browser?
Was sendet der Browser?
| Zeile | Einrückung | Anweisung |
|---|---|---|
| 1 | 0 | |
| 2 | 1 | |
| 3 | 1 | |
| 4 | 1 | |
| 5 | 0 |
Lea Maier trägt in das erste Feld ihren Namen und in das zweite die Zahl 2 ein. Was wird gesendet, bei und bei ?
Bei ruft der Browser auf. Das Fragezeichen leitet die Paare ein, das trennt sie, das Leerzeichen wird zu .
Bei ruft er auf, und steht im Körper der Anfrage.
Dynamische Webseiten mit SQL und Benutzerverwaltung
Eine dynamische Webseite wird erst beim Abruf erzeugt. Ein Programm auf dem Server, etwa in Python oder PHP, liest die Formulardaten, fragt per SQL die Datenbank und baut aus dem Ergebnis HTML, das zum Browser zurückgeht. Die Seite zeigt so immer den aktuellen Stand.
Formulardaten stammen von Fremden. Fügt man sie als Text in eine SQL-Anweisung ein, ermöglicht das SQL-Injection. Schutz bieten Platzhalter: Die Anweisung enthält ein , der Wert wird getrennt übergeben und nie als SQL gelesen.
Die Benutzerverwaltung nutzt eine Tabelle, etwa . Passwörter speichert man nie im Klartext, sondern als Hashwert mit Salt, einem zufälligen Zusatz je Nutzer, damit gleiche Passwörter verschiedene Hashwerte ergeben. Bei der Anmeldung hasht man das eingegebene Passwort und vergleicht. Danach vergibt der Server eine zufällige Sitzungs-ID, die der Browser als Cookie mitschickt. Authentifizierung prüft, wer jemand ist, Autorisierung, was die Person darf (nur die Rolle sieht die Anmeldeliste). Die Übertragung läuft über HTTPS.
SQL-Injection und Platzhalter
SQL-Injection und Platzhalter
| Zeile | Einrückung | Anweisung |
|---|---|---|
| 1 | 0 |
Was passiert bei der Eingabe ?
Es entsteht . Die Bedingung ist immer wahr, die Abfrage liefert alle Nutzer. Mit Platzhalter () wird die ganze Eingabe als Name behandelt. Es gibt keinen solchen Nutzer, die Antwort ist leer.
POST verschlüsselt die Daten
POST verschlüsselt die Daten
„Das Passwort geht per POST, also kann es niemand lesen.“
POST nimmt die Daten nur aus der URL heraus. Ohne HTTPS laufen sie unverschlüsselt durchs Netz. Die Verschlüsselung leistet HTTPS, nicht POST.
Passwörter im Klartext sind in Ordnung
Passwörter im Klartext sind in Ordnung
„Die Datenbank ist geschützt, also kann ich die Passwörter im Klartext speichern.“
Datenbanken werden gestohlen oder von Mitarbeitenden gelesen. Mit Klartext hätten Angreifer sofort alle Passwörter. Hashwerte mit Salt sind deutlich schwerer zu knacken.
Zusammenfassung
HTML5 besteht aus Elementen mit Attributen. Das Grundgerüst hat doctype, html, head und body. Links setzt das Element a mit href.
Der Browser baut aus dem HTML den Dokumentbaum, auf den CSS und Skripte zugreifen.
CSS-Selektoren wählen nach Typ, Klasse, ID, Lage im Baum und Zustand. Bei Konflikten gewinnt der spezifischere Selektor.
Im Grid-Layout ist ein fr ein Anteil des Platzes, der nach festen Größen und Abständen übrig bleibt.
Formulare senden Paare name=wert per GET in der URL oder per POST im Körper der Anfrage.
Dynamische Seiten fragen die Datenbank per SQL, mit Platzhaltern gegen Injection. Passwörter werden als Hash mit Salt gespeichert.
Übungen
Ein body-Element enthält eine Überschrift h1 und eine Liste ul mit drei Einträgen li. Wie viele Elemente hat der Dokumentbaum dieses Ausschnitts, wenn body mitgezählt wird?
Es gelten die Regeln p { color: navy; }, .hinweis { color: red; } und #kopf { color: green; }. Ein Absatz p hat class="hinweis" und id="kopf". Welche Farbe hat sein Text?
Ein Container ist 1000 Pixel breit und hat grid-template-columns: 1fr 2fr sowie gap: 40px. Wie breit ist die zweite Spalte, in Pixeln?
Welche Aussage zum Absenden eines Anmeldeformulars mit Passwort ist richtig?
Erkläre, warum ein Platzhalter in einer SQL-Anweisung vor SQL-Injection schützt, und wie ein Passwort in der Benutzertabelle gespeichert werden sollte.