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
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Webserver | ein Programm, das Webseiten ausliefert | nginx |
| Konfiguration | die Datei mit den Einstellungen eines Servers | |
| Header | eine Kopfzeile einer Antwort mit einer Zusatzangabe | |
| Versionsnummer | die Zahl, die zeigt, welche Ausgabe eines Programms läuft | 1.27.5 |
| Ordnerliste | eine 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ällt | Warum es hilft, es zu verstecken | Gegenmittel |
|---|---|---|
| Versionsnummer im Header | Wer die Version kennt, sucht nach bekannten Fehlern darin | Versionsnummer abschalten |
| Ordnerliste | Sie zeigt Dateien, von denen niemand wusste | Ordnerliste abschalten |
| Entwicklungsdateien wie .git | Sie enthalten Adressen und manchmal Passwörter | Den 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
curl -I http://webHier 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
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
curl -s -o /dev/null -w "%{http_code}\n" http://web/.git/configHier 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
| Header | Was er dem Browser sagt |
|---|---|
| X-Content-Type-Options | Rate den Typ einer Datei nicht, nimm den genannten |
| X-Frame-Options | Zeige diese Seite nicht in einem fremden Rahmen |
| Content-Security-Policy | Lade Skripte und Bilder nur von diesen Orten |
| Referrer-Policy | Verrate 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)
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
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?