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

Eine Website sicher veröffentlichen

Nach dieser Lektion: Ich kann an den Einstellungen eines Webservers erkennen, was er unnötig verrät.

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

Was verrät deine Website über sich?

Einen Webserver absichern heißt, seine Einstellungen so zu wählen, dass er möglichst wenig verrät und möglichst wenig erlaubt. Viele Seiten sind unsicher, weil niemand die Standardwerte geändert hat.

Die eine Regel hier: Arbeite nur an deiner eigenen Kopie im Lab und nur mit Erlaubnis. Wir lernen, wie man schützt, und zielen auf kein echtes System.

Am Ende dieser Lektion

Notiz

Ich kann an den Einstellungen eines Webservers erkennen, was er unnötig verrät.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Webserverein Programm, das Webseiten ausliefertnginx
Konfigurationdie Datei mit den Einstellungen eines Servers
Headereine Kopfzeile einer Antwort mit einer Zusatzangabe
Versionsnummerdie Zahl, die zeigt, welche Ausgabe eines Programms läuft1.27.5
Ordnerlisteeine Seite, die alle Dateien eines Ordners aufzählt

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

Welche Standardwerte sind ein Risiko?

Ein frisch installierter Server ist auf Bequemlichkeit eingestellt, nicht auf Sicherheit. Drei Dinge fallen oft auf.

Er nennt seine Versionsnummer in jeder Antwort. Er zeigt eine Ordnerliste, wenn ein Ordner keine Startseite hat. Und er liefert Dateien aus, die nie öffentlich sein sollten, etwa Reste der Entwicklung.

Beispiel: Risiken und Gegenmittel

Was auffälltWarum es hilft, es zu versteckenGegenmittel
Versionsnummer im HeaderWer die Version kennt, sucht nach bekannten Fehlern darinVersionsnummer abschalten
OrdnerlisteSie zeigt Dateien, von denen niemand wussteOrdnerliste abschalten
Entwicklungsdateien wie .gitSie enthalten Adressen und manchmal PasswörterDen Zugriff auf Punktdateien verbieten

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

Bevor du anfängst

Notiz

Drück oben in der Leiste auf Lab starten und warte, bis die Maschine läuft. Im Lab läuft die Seite einer kleinen Bäckerei unter dem Namen web. Die Runs lesen nur. Sie ändern nichts. Die Fehler beheben ist die Aufgabe des Labs.

Die Kopfzeilen der Antwort lesen

Befehl
curl -I 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.

Prüfen, ob der Ordner files eine Liste zeigt

Befehl
curl -s http://web/files/ | grep -o -m 1 "Index of /files/"

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 Statuscode einer Entwicklungsdatei lesen

Befehl
curl -s -o /dev/null -w "%{http_code}\n" http://web/.git/config

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

Wozu dienen Sicherheits-Header?

Ein Server kann in jede Antwort Kopfzeilen schreiben, die dem Browser Regeln mitgeben. Der Browser hält sich daran.

Vier davon sind weit verbreitet. Jede schützt vor einer anderen Sorte Angriff, und alle kosten eine Zeile in der Konfiguration.

Beispiel: vier Sicherheits-Header

HeaderWas er dem Browser sagt
X-Content-Type-OptionsRate den Typ einer Datei nicht, nimm den genannten
X-Frame-OptionsZeige diese Seite nicht in einem fremden Rahmen
Content-Security-PolicyLade Skripte und Bilder nur von diesen Orten
Referrer-PolicyVerrate der nächsten Seite nicht, woher die Person kam

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

So sieht eine abgesicherte Konfiguration aus (Beispiel)

Code: bash
server {
  listen 80;
  server_tokens off;
  autoindex off;
  add_header X-Content-Type-Options "nosniff" always;
  add_header X-Frame-Options "DENY" always;
}

Ein häufiger Fehler

Warnung

Viele denken, eine Datei, auf die kein Link zeigt, finde niemand. Das stimmt nicht. Programme raten Namen wie .git, config.php.bak oder admin in Sekunden. Was nicht öffentlich sein soll, gehört gar nicht erst in den Ordner, den der Server ausliefert.

Wie prüft ein Programm eine Konfiguration?

Eine Konfiguration ist Text, und Text kann ein Programm Zeile für Zeile lesen. Es schneidet Leerzeichen ab und vergleicht mit der Zeile, die es erwartet.

So findet ein Werkzeug in Sekunden, was ein Mensch übersieht. Du baust gleich so ein Werkzeug.

Eine Zeile prüfen

Code: python
zeile = "  server_tokens on;  "
# strip() schneidet die Leerzeichen am Rand ab.
if zeile.strip() == "server_tokens off;":
    print("gut")
else:
    print("Problem: die Version ist sichtbar")
# Ändere on zu off und drück noch einmal auf Ausführen.

Weiterführend: Passwörter gehören nicht in den Webordner

Im Lab liegt im Webordner eine Datei mit der Endung .bak. Eine Sicherungskopie einer Datei mit Einstellungen, die jemand vergessen hat.

Überlege: Wo sollten solche Dateien liegen? Und welche zwei Gegenmittel kennst du jetzt, wenn eine so eine Datei doch einmal im Webordner liegt?

Ü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.