Referrer-Policy für Express.js konfigurieren
Schritt-für-Schritt: Referrer-Policy über helmet.js oder eigene Middleware setzen, pro Route überschreiben und mit Supertest automatisch testen.
Referrer-Policy in Express.js
Für Express.js ist helmet.js der De-facto-Standard für Security-Header. Es setzt mit einer Zeile nicht nur die Referrer-Policy, sondern auch X-Content-Type-Options, X-Frame-Options, HSTS und weitere Security-Header. Bei Projekten ohne helmet gibt es eine einfache manuelle Middleware als Alternative.
Referrer-Policy bringt 10 von 166 Punkten im Wolf-Agents Web Security Check. Diese Anleitung zeigt beide Wege und erklärt das Pro-Route-Überschreiben für Bereiche, die eine strengere Policy benötigen (z.B. /admin).
helmet.referrerPolicy()
helmet.js ist ein Middleware-Paket, das Security-Header für Express.js-Anwendungen setzt. helmet.referrerPolicy() ist der empfohlene Weg und wird aktiv maintained. Bei neuen Projekten sollte immer das volle helmet() eingebunden werden, das alle Security-Header auf einmal konfiguriert.
# helmet.js installieren
npm install helmet
# TypeScript-Typisierung ist inklusive (kein @types/helmet nötig) // app.js — Referrer-Policy mit helmet.js
const express = require('express');
const helmet = require('helmet');
const app = express();
// Nur Referrer-Policy setzen
app.use(helmet.referrerPolicy({
policy: 'strict-origin-when-cross-origin',
}));
// Oder: Alle Security-Header mit helmet (empfohlen)
app.use(helmet({
referrerPolicy: {
policy: 'strict-origin-when-cross-origin',
},
})); Binden Sie helmet oder Ihre Security-Header-Middleware immer vor den Routen-Definitionen ein. Andernfalls werden die Header nicht für alle Requests gesetzt. Die übliche Reihenfolge: helmet → body-parser → rate-limiter → Routen.
Manuelle Middleware
Wenn helmet.js nicht in Frage kommt (z.B. wegen Paketgröße in Microservices oder spezifischen Constraints), können Sie eine eigene Middleware-Funktion schreiben. Diese ist in wenigen Zeilen implementiert und funktioniert identisch.
// Manuelle Middleware — ohne helmet.js
const express = require('express');
const app = express();
// Eigene Security-Header Middleware
function securityHeaders(req, res, next) {
res.setHeader('Referrer-Policy', 'strict-origin-when-cross-origin');
res.setHeader('X-Content-Type-Options', 'nosniff');
res.setHeader('X-Frame-Options', 'SAMEORIGIN');
next();
}
// Vor allen Routen einbinden
app.use(securityHeaders); Pro-Route überschreiben
Für Bereiche mit erhöhtem Schutzbedarf (Admin-Panel, Passwort-Reset, Bezahlseiten) können Sie die globale Policy im Route-Handler oder über eine route-spezifische Middleware überschreiben. res.setHeader() überschreibt den von helmet gesetzten Header.
// Pro-Route überschreiben — strengere Policy für /admin
app.get('/admin', (req, res) => {
// Überschreibt die globale helmet-Policy
res.setHeader('Referrer-Policy', 'no-referrer');
res.json({ status: 'ok' });
});
// Oder als Route-spezifische Middleware:
const noReferrer = (req, res, next) => {
res.setHeader('Referrer-Policy', 'no-referrer');
next();
};
app.use('/admin', noReferrer, adminRouter); Verwenden Sie no-referrer für Seiten mit sensiblen Tokens in der URL (Passwort-Reset, Email-Bestätigung) und für Admin-Bereiche. Für normale Inhaltsseiten ist strict-origin-when-cross-origin der optimale Kompromiss.
Konfiguration verifizieren
Testen Sie die Header manuell mit curl oder automatisiert in Ihrer Test-Suite. Supertest ist die empfohlene Bibliothek für HTTP-Tests in Express.js-Projekten.
# Server starten und Header prüfen
node app.js
# In einem zweiten Terminal:
curl -sI http://localhost:3000 | grep -i referrer-policy
# Erwartete Ausgabe:
# referrer-policy: strict-origin-when-cross-origin
# Unit-Test mit supertest (Jest):
# expect(res.headers['referrer-policy'])
# .toBe('strict-origin-when-cross-origin'); Wie steht Ihre Domain bei Referrer-Policy?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.
Häufig gestellte Fragen
Wie setze ich die Referrer-Policy in Express.js?
Die empfohlene Methode: helmet.js installieren (npm install helmet) und app.use(helmet.referrerPolicy({ policy: "strict-origin-when-cross-origin" })) in Ihre Express-App einbinden. Alternativ können Sie eine eigene Middleware schreiben: app.use((req, res, next) => { res.setHeader("Referrer-Policy", "strict-origin-when-cross-origin"); next(); }).
Warum helmet.js statt manuellem Header?
helmet.js ist der De-facto-Standard für Security-Header in Express.js. Es setzt nicht nur die Referrer-Policy, sondern auch X-Content-Type-Options, X-Frame-Options, HSTS und weitere Header in einer Zeile. Das reduziert Konfigurationsaufwand und Fehler. Bei neuen Express-Projekten sollte helmet immer von Anfang an eingebunden werden.
Kann ich mehrere Referrer-Policy-Werte angeben?
Ja. Die Referrer-Policy unterstützt einen Fallback-Mechanismus: z.B. "no-referrer, strict-origin-when-cross-origin". Browser nutzen den ersten Wert, den sie unterstützen. helmet.js unterstützt Arrays: policy: ["no-referrer", "strict-origin-when-cross-origin"]. Das ist nützlich für ältere Browser-Kompatibilität.
Überschreibt res.setHeader() einen bereits gesetzten Header?
Ja. res.setHeader() überschreibt einen vorhandenen Header. Wenn helmet bereits einen Referrer-Policy-Header setzt und Sie in einem Route-Handler res.setHeader() aufrufen, gilt der Route-Handler-Wert. Das ermöglicht das Pro-Route-Überschreiben.
Funktioniert helmet.js mit TypeScript?
Ja. helmet.js ist vollständig typisiert und funktioniert nativ mit TypeScript. Installieren Sie es mit npm install helmet und import helmet from "helmet" in TypeScript-Projekten. Die Typings sind im Paket enthalten.
Gilt der Header auch für Express-Fehlermitteilungen (Error Handler)?
Ja, wenn die Middleware vor dem Error-Handler eingebunden ist. Express führt die Middleware in der Reihenfolge aus, in der sie mit app.use() registriert wurde. Helmet und Ihre Middleware sollten vor app.use(router) und error-handling middleware eingebunden sein.
Wie teste ich die Header in Express-Unit-Tests?
Nutzen Sie supertest (npm install --save-dev supertest): const response = await request(app).get("/"); expect(response.headers["referrer-policy"]).toBe("strict-origin-when-cross-origin"). Das lässt sich in Jest, Mocha oder Vitest integrieren.