X-Frame-Options für Next.js konfigurieren

Schritt-für-Schritt-Anleitung: X-Frame-Options und CSP frame-ancestors in Next.js einrichten — beide Header gleichzeitig in next.config.js, kein Middleware nötig.

Next.js · Schritt für Schritt

Clickjacking-Schutz in Next.js

X-Frame-Options und CSP frame-ancestors verhindern, dass Ihre Next.js-Anwendung in fremden iFrames eingebettet wird. In Next.js konfigurieren Sie beide Header über die headers()-Funktion in der next.config.js — statische Header, die keine Middleware erfordern. Der Vorteil: Beide Header werden in einem Konfigurationsblock gesetzt, und das /:path*-Pattern schützt alle Routen gleichzeitig.

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 Ihrer next.config.js hinzu. Das /:path*-Pattern matcht alle Routen. DENY und frame-ancestors 'none' blockieren jede iFrame-Einbettung — der stärkste Schutz gegen Clickjacking.

next.config.js Produktiv
// Clickjacking-Schutz — Defense-in-Depth
const nextConfig = {
  async headers() {
    return [{
      source: '/:path*',
      headers: [
        { key: 'X-Frame-Options', value: 'DENY' },
        { key: 'Content-Security-Policy', value: "frame-ancestors 'none'" }
      ]
    }]
  },
};

module.exports = nextConfig;
DENY vs. SAMEORIGIN

Die Next.js-Konfiguration setzt DENY, weil die meisten Next.js-Apps keine iFrame-Einbettung benötigen. Wenn Sie iFrames verwenden (z.B. Dashboard-Widgets), ersetzen Sie DENY durch SAMEORIGIN und frame-ancestors 'none' durch frame-ancestors 'self'.

2 Schritt 2 von 2

Header verifizieren

Starten Sie den Entwicklungsserver neu und verifizieren Sie beide Header mit curl. Änderungen an next.config.js erfordern einen Neustart — Hot Reload greift bei Konfigurationsänderungen nicht.

Terminal Verifizieren
# Entwicklungsserver neu starten
npm run dev

# X-Frame-Options-Header prüfen
curl -sI http://localhost:3000 | grep -i x-frame

# Erwartete Ausgabe:
# X-Frame-Options: DENY

# frame-ancestors prüfen
curl -sI http://localhost:3000 | grep -i content-security

# Erwartete Ausgabe:
# Content-Security-Policy: frame-ancestors 'none'
Testen Sie bei Production Builds zusätzlich nach next build && next start — die Header sollten identisch 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

Brauche ich Middleware für X-Frame-Options in Next.js?

Nein. X-Frame-Options und frame-ancestors sind statische Header — derselbe Wert für jeden Request. Die headers()-Funktion in next.config.js genügt vollständig. Middleware wäre nur nötig, wenn der Header-Wert pro Request variieren müsste.

Warum setzt die Next.js-Konfiguration DENY statt SAMEORIGIN?

Next.js-Anwendungen benötigen in der Regel keine iFrame-Einbettung. DENY blockiert jede Einbettung — auch von der eigenen Domain. Wenn Sie iFrames benötigen (z.B. für ein Dashboard-Widget), wechseln Sie zu SAMEORIGIN und frame-ancestors 'self'.

Funktioniert die Konfiguration auf Vercel?

Ja. Vercel übernimmt die headers()-Konfiguration aus next.config.js automatisch. Alternativ können Sie Header auch in der vercel.json definieren.

Wird der Header auch bei API-Routes gesetzt?

Ja, das Pattern /:path* matcht alle Pfade inklusive /api/*. Für API-Routes ist X-Frame-Options weniger relevant (sie liefern keine HTML-Seiten), aber der Header schadet nicht.

Was wenn ich bereits eine CSP-Middleware mit frame-ancestors habe?

Wenn Ihre CSP-Middleware bereits frame-ancestors setzt, entfernen Sie die frame-ancestors-Zeile aus der next.config.js. Doppelte CSP-Header können zu Konflikten führen. Setzen Sie nur X-Frame-Options als zusätzlichen Fallback.