Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Einen Webserver absichern: Header und Verzeichnislisten

Nach dieser Lektion: Ich kann die Antwort eines Webservers lesen und sagen, welche Einstellungen fehlen.

Lektion, 50 Min.3 BefehleWebserver-Härtungslab: eine schwache nginx-Konfiguration reparieren und mit curl prüfen

Wie sichert man einen Webserver ab?

Einen Webserver sichert man ab, indem man ihm abgewöhnt, zu viel zu verraten, und ihm zusätzliche Schutz-Header mitgibt. Ein Webserver ist das Programm, das Webseiten an Besucherinnen und Besucher ausliefert.

Du lernst, was ein Server bei jeder Anfrage mitschickt und was davon einem Angreifer hilft. Du übst nur an deiner eigenen Kopie.

Am Ende dieser Lektion

Notiz

Ich kann die Antwort eines Webservers lesen und sagen, welche Einstellungen fehlen.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Webserverein Programm, das Webseiten ausliefertnginx
Headereine Kopfzeile, die der Server vor der Seite mitschickt
Statuscodeeine Zahl, die sagt, wie die Anfrage ausging200
Verzeichnislisteeine Seite, die alle Dateien eines Ordners auflistet
Konfigurationdie Einstellungen, nach denen ein Server arbeitet

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Was schickt ein Server bei jeder Anfrage mit?

Wenn dein Browser eine Seite holt, antwortet der Server zuerst mit einer Statuszeile und mehreren Headern. Erst danach kommt die Seite selbst.

Die Statuszeile enthält einen Statuscode: 200 heißt „gefunden“, 404 heißt „gibt es nicht“, 403 heißt „verboten“. Die Header sind Zusatzinformationen, zum Beispiel, welche Software der Server benutzt.

Beispiel: die Antwort einer erfundenen Vereinsseite

ZeileWas sie sagt
HTTP/1.1 200 OKDie Seite wurde gefunden
Server: nginx/1.20.1Software und Versionsnummer des Servers
Content-Type: text/htmlEs kommt eine Webseite
Content-Length: 612Die Seite ist 612 Bytes groß

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Die eine Regel für dieses Lab

Warnung

Frag nur den Server in deiner eigenen Kopie des Labs ab und nie eine fremde Seite ohne Erlaubnis. Das wäre strafbar. Du liest hier eine Antwort, um zu lernen, was ein Angreifer sehen würde, und sie dann besser zu schützen.

Bevor du anfängst

Notiz

Drück oben in der Leiste auf Lab starten und warte, bis die Maschine läuft. Der Server in diesem Lab heißt web. Die Befehle erscheinen im Terminal, wenn du auf Ausführen drückst.

Die Statuszeile der Startseite lesen

Befehl
curl -sI http://web | head -n 1

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den Server-Header ansehen

Befehl
curl -sI http://web | grep -i '^server'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Nur den Statuscode ausgeben

Befehl
curl -s -o /dev/null -w '%{http_code}\n' http://web/

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Warum soll der Server seine Version verschweigen?

Zu jeder Version einer Software sammeln Fachleute bekannte Fehler. Wer die Versionsnummer kennt, weiß, welche Fehler er versuchen kann.

Die Versionsnummer nützt Besucherinnen und Besuchern nichts. Darum stellt man sie ab. Die Einstellung heißt bei nginx server_tokens.

Welche Schutz-Header gibt es?

Ein Sicherheits-Header ist eine Kopfzeile, die dem Browser Regeln für die Seite mitgibt. Der Browser hält sich daran und schützt so die Besucherinnen und Besucher.

Vier gehören auf jede Seite. Die Tabelle zeigt, was jeder bewirkt.

Vier Sicherheits-Header und ihr Schutz

HeaderBeispielwertSchützt vor
X-Content-Type-OptionsnosniffDateien, die der Browser falsch deutet
X-Frame-OptionsSAMEORIGINDer Seite in einem fremden Rahmen (Clickjacking)
Content-Security-Policydefault-src 'self'Fremdem Code, der in die Seite eingeschleust wird
Referrer-Policyno-referrerDem Weitergeben der Adresse an andere Seiten

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein häufiger Fehler

Warnung

Viele denken, eine Datei sei sicher, wenn nirgends ein Link auf sie zeigt. Ein Angreifer probiert aber gängige Namen wie .git, backup.zip oder admin einfach aus. Eine Datei ist nur dann geschützt, wenn der Server sie nicht ausliefert.

Header aus einem Text lesen

Code: python
antwort = "HTTP/1.1 200 OK\nServer: nginx/1.20.1\nX-Frame-Options: DENY"

# Jede Zeile mit ": " ist ein Header: links der Name, rechts der Wert.
for zeile in antwort.split("\n"):
    if ": " in zeile:
        teile = zeile.split(": ")
        print(teile[0], "->", teile[1])

Warum ist eine Verzeichnisliste gefährlich?

Fragt jemand nach einem Ordner ohne Startseite, kann der Server eine Verzeichnisliste zeigen: eine Seite mit allen Dateien darin.

Das ist bequem für die Betreuerin, aber auch für einen Angreifer. Er sieht dann Dateien, von denen niemand wusste, dass sie online sind. Dasselbe gilt für Sicherungskopien und Einstellungsdateien auf dem Server.

Beispiel: Schutz-Header einer Vereinsseite

Code: web
# Beispiel für eine andere Seite, kein Befehl zum Ausführen
server_tokens off;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;

Weiterführend: dein Schulnetz

Eine Richtlinie ist eine Liste von Regeln, die jede Seite erfüllen soll. Schreib für eine Seite deiner Wahl auf Papier fünf Regeln auf.

Prüfe nur Seiten, die dir selbst gehören. Hand die Liste deiner Lehrkraft, damit sie sie mit dir durchgeht.

Über dieses Lab und seinen Quellcode: Webserver-Härtungslab: eine schwache nginx-Konfiguration reparieren und mit curl prüfen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.