X-Frame-Options für Nginx konfigurieren
Schritt-für-Schritt-Anleitung: X-Frame-Options und CSP frame-ancestors auf Nginx einrichten — Defense-in-Depth gegen Clickjacking mit fertiger Konfiguration zum Kopieren.
Clickjacking-Schutz auf Nginx
X-Frame-Options verhindert, dass Ihre Website in fremden iFrames eingebettet wird — der primäre Schutz gegen Clickjacking-Angriffe. Nginx unterstützt den Header nativ über die add_header-Direktive. Verwenden Sie das always-Keyword, damit der Header auch bei Fehlerseiten gesetzt wird. Setzen Sie zusätzlich frame-ancestors als modernen CSP-basierten Schutz — beide Header zusammen bieten Defense-in-Depth.
X-Frame-Options ist mit 10 von 166 Punkten ein Faktor im Wolf-Agents Web Security Check. Die Konfiguration dauert weniger als 5 Minuten.
X-Frame-Options und frame-ancestors konfigurieren
Fügen Sie beide Header in Ihrem HTTPS-Server-Block hinzu. X-Frame-Options: SAMEORIGIN ist der Fallback für älteste Clients. frame-ancestors 'self' ist der moderne CSP-basierte Schutz. Das always-Keyword stellt sicher, dass die Header auch bei 404- und 500-Fehlerseiten gesetzt werden.
# Clickjacking-Schutz — Defense-in-Depth
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Content-Security-Policy "frame-ancestors 'self'" always; Nginx vererbt add_header-Direktiven aus dem server-Block in location-Blöcke — aber nur, wenn der location-Block keine eigenen add_header-Direktiven enthält. Sobald ein location-Block einen eigenen Header setzt, müssen Sie X-Frame-Options und frame-ancestors dort wiederholen.
Konfiguration testen und verifizieren
Prüfen Sie die Nginx-Konfiguration auf Syntaxfehler und laden Sie sie neu. Verifizieren Sie beide Header anschließend mit curl.
# 1. Konfiguration prüfen und Nginx neu laden
sudo nginx -t && sudo systemctl reload nginx
# 2. X-Frame-Options-Header prüfen
curl -sI https://ihre-domain.de | grep -i x-frame
# Erwartete Ausgabe:
# X-Frame-Options: SAMEORIGIN
# 3. frame-ancestors prüfen
curl -sI https://ihre-domain.de | grep -i content-security
# Erwartete Ausgabe:
# Content-Security-Policy: frame-ancestors 'self' /login, /dashboard und API-Endpoints. Der Header muss auf allen Seiten gesetzt sein. Wie steht Ihre Domain bei X-Frame-Options?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.
Häufig gestellte Fragen
Wo setze ich X-Frame-Options in Nginx?
Im server- oder http-Block Ihrer Nginx-Konfiguration. Verwenden Sie die add_header-Direktive mit dem always-Keyword, damit der Header auch bei Fehlerseiten (404, 500) gesetzt wird. Bei location-Blöcken beachten Sie: add_header wird nur vererbt, wenn der location-Block keine eigenen add_header-Direktiven enthält.
Warum brauche ich das always-Keyword?
Ohne always setzt Nginx den Header nur bei erfolgreichen Responses (2xx/3xx). Fehlerseiten erhalten keinen X-Frame-Options-Header — Angreifer könnten gezielt Fehlerseiten in iFrames einbetten. Mit always wird der Header bei jedem Response gesetzt.
Soll ich DENY oder SAMEORIGIN verwenden?
DENY wenn Ihre Website keine iFrame-Einbettung benötigt (Standard für die meisten Websites). SAMEORIGIN nur wenn Sie eigene Seiten in eigenen iFrames einbetten (z.B. Dashboard-Widgets). Im Zweifel: SAMEORIGIN ist die sicherere Wahl, die weniger kaputt macht.
Überschreibt ein location-Block den X-Frame-Options-Header?
Ja. Wenn ein location-Block eigene add_header-Direktiven enthält, erbt er keine Header aus dem übergeordneten server-Block. Sie müssen X-Frame-Options dann in jedem location-Block wiederholen, der eigene add_header-Direktiven hat.
Reicht X-Frame-Options allein oder brauche ich auch frame-ancestors?
Setzen Sie beide Header. X-Frame-Options ist der Fallback für älteste Clients. CSP frame-ancestors ist der moderne Standard mit Multi-Origin-Support. Bei Konflikten priorisieren moderne Browser frame-ancestors. Defense-in-Depth: Beide Header parallel setzen.