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 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 — 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); 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
| Header | Schutz | Kapitel |
|---|---|---|
Content-Security-Policy | XSS-Angriffe verhindern — mit Nonces und strict-dynamic | Kap. 01 |
Strict-Transport-Security | HTTPS erzwingen — Downgrade-Angriffe verhindern | Kap. 02 |
Permissions-Policy | Browser-APIs deaktivieren — Kamera, Mikrofon, etc. | Kap. 04 |
X-Frame-Options | Clickjacking verhindern — Einbettung kontrollieren | Kap. 05 |
Referrer-Policy | URL-Leaks kontrollieren | Kap. 06 |
X-Content-Type-Options | MIME-Sniffing verhindern | Kap. 07 |
CORP / COOP / COEP | Cross-Origin-Isolation | Kap. 08 |
Reporting-Endpoints | Violation-Reports senden | Kap. 14 |
Origin-Agent-Cluster | Prozess-Isolation | Kap. 16 |
Verifikation
Starten Sie den Server und prüfen Sie die Header.
# 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.