Alle Security Headers für Express.js konfigurieren

Custom Middleware: 11 Security Headers mit CSP-Nonces und strict-dynamic. Eine Datei, app.use() — fertig.

Express.js · Vollständige Konfiguration

Express.js Middleware mit CSP-Nonces

Express.js setzt Security Headers über eine Custom Middleware, die per app.use() registriert wird. Die Middleware generiert bei jedem Request einen einzigartigen CSP-Nonce und macht ihn über res.locals.nonce in Templates verfügbar. In EJS: <script nonce="<%= nonce %>">, in Pug: script(nonce=nonce).

Diese Middleware ersetzt helmet() nicht, sondern ist eine Alternative für vollständige Kontrolle. Wenn Sie helmet bereits nutzen, prüfen Sie welche Header bereits gesetzt sind, um Duplikate zu vermeiden.

Vollständige Konfiguration

Erstellen Sie middleware/securityHeaders.js und binden Sie die Middleware in app.js ein.

middleware/securityHeaders.js 11 Header + Nonces
// middleware/securityHeaders.js — Alle Security-Header zentral
// Generiert aus Wolf-Agents Web Security Guide, Kapitel 00-16

import crypto from 'crypto';

export function securityHeaders(req, res, next) {
  const nonce = crypto.randomBytes(16).toString('base64');

  // --- Kap 01: Content Security Policy ---
  // ANPASSEN: Ersetzen Sie die Domains durch Ihre eigenen
  const csp = [
    `default-src 'self'`,
    `script-src 'self' 'nonce-${nonce}' 'strict-dynamic'`,
    `style-src 'self' 'unsafe-inline'`,
    `img-src 'self' data: https:`,
    `font-src 'self'`,
    `connect-src 'self'`,
    `object-src 'none'`,
    `worker-src 'self'`,
    `frame-ancestors 'self'`,
    `base-uri 'self'`,
    `form-action 'self'`,
    `upgrade-insecure-requests`,
    `report-to csp-endpoint`,
  ].join('; ');
  res.setHeader('Content-Security-Policy', csp);

  // --- Kap 02: HTTP Strict Transport Security ---
  res.setHeader('Strict-Transport-Security',
    'max-age=31536000; includeSubDomains; preload');

  // --- Kap 04: Permissions Policy ---
  res.setHeader('Permissions-Policy',
    'camera=(), microphone=(), geolocation=(), payment=(), usb=(), bluetooth=(), idle-detection=(), serial=(), browsing-topics=(), unload=()');

  // --- Kap 05: Clickjacking-Schutz ---
  res.setHeader('X-Frame-Options', 'SAMEORIGIN');

  // --- Kap 06: Referrer Policy ---
  res.setHeader('Referrer-Policy', 'strict-origin-when-cross-origin');

  // --- Kap 07: MIME-Sniffing-Schutz ---
  res.setHeader('X-Content-Type-Options', 'nosniff');

  // --- Kap 08: Cross-Origin Isolation ---
  res.setHeader('Cross-Origin-Resource-Policy', 'same-origin');
  res.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
  res.setHeader('Cross-Origin-Embedder-Policy', 'credentialless');

  // --- Kap 14: Reporting Endpoints ---
  // ANPASSEN: Ersetzen Sie die URL durch Ihren Reporting-Endpoint
  res.setHeader('Reporting-Endpoints',
    'csp-endpoint="https://ihre-domain.de/csp-report"');

  // --- Kap 16: Origin Agent Cluster ---
  res.setHeader('Origin-Agent-Cluster', '?1');

  // Nonce für Templates verfügbar machen
  res.locals.nonce = nonce;

  next();
}

// Einbindung in app.js:
// import { securityHeaders } from './middleware/securityHeaders.js';
// app.use(securityHeaders);
Nonce in Templates

Der Nonce ist über res.locals.nonce in allen Templates verfügbar. EJS: <script nonce="<%= nonce %>">. Pug: script(nonce=nonce). Handlebars: <script nonce="{{{nonce}}{}">.

Was jeder Header macht

HeaderSchutzKapitel
Content-Security-PolicyXSS-Angriffe verhindern — mit Nonces und strict-dynamicKap. 01
Strict-Transport-SecurityHTTPS erzwingen — Downgrade-Angriffe verhindernKap. 02
Permissions-PolicyBrowser-APIs deaktivieren — Kamera, Mikrofon, etc.Kap. 04
X-Frame-OptionsClickjacking verhindern — Einbettung kontrollierenKap. 05
Referrer-PolicyURL-Leaks kontrollierenKap. 06
X-Content-Type-OptionsMIME-Sniffing verhindernKap. 07
CORP / COOP / COEPCross-Origin-IsolationKap. 08
Reporting-EndpointsViolation-Reports sendenKap. 14
Origin-Agent-ClusterProzess-IsolationKap. 16

Verifikation

Starten Sie den Server und prüfen Sie die Header.

Terminal Prüfung
# Server starten
node app.js

# Alle Security Headers prüfen
curl -I http://localhost:3000 2>/dev/null | grep -iE \
  "content-security|strict-transport|x-frame|x-content-type|referrer-policy|permissions-policy|cross-origin|origin-agent|reporting-endpoints"

Wie steht Ihre Domain bei Security-Header-Architektur?

Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.