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.

Nginx · Schritt für Schritt

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.

1 Schritt 1 von 2

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.

/etc/nginx/conf.d/clickjacking.conf Produktiv
# Clickjacking-Schutz — Defense-in-Depth
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Content-Security-Policy "frame-ancestors 'self'" always;
Location-Vererbung beachten

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.

2 Schritt 2 von 2

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.

Terminal Verifizieren
# 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'
Testen Sie nicht nur die Homepage — prüfen Sie auch /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.