HTTPS enforcement and referrer policy configuration for secure communication and privacy protection.
Enforces HTTPS connections by instructing browsers to only connect via HTTPS for a specified period.
/**
* Sets Strict-Transport-Security header to enforce HTTPS
* @param options - HSTS configuration options
* @returns Express middleware function
*/
function strictTransportSecurity(
options?: StrictTransportSecurityOptions
): MiddlewareFunction;
interface StrictTransportSecurityOptions {
/** Duration in seconds for HSTS policy (default: 31536000 - 1 year) */
maxAge?: number;
/** Apply policy to all subdomains (default: true) */
includeSubDomains?: boolean;
/** Eligible for browser preload lists (default: false) */
preload?: boolean;
}Usage Examples:
import { strictTransportSecurity } from "helmet";
// Default: 1 year, include subdomains
app.use(strictTransportSecurity());
// Custom configuration
app.use(strictTransportSecurity({
maxAge: 63072000, // 2 years
includeSubDomains: true,
preload: true
}));
// Short duration for testing
app.use(strictTransportSecurity({
maxAge: 300, // 5 minutes
includeSubDomains: false
}));Configuration Details:
maxAge: Duration in seconds that browsers should remember to only access via HTTPS
includeSubDomains: Whether to apply HSTS policy to all subdomains
true: Protects subdomains but requires all to support HTTPSfalse: Only applies to the exact domainpreload: Whether the domain is eligible for browser preload lists
maxAge >= 31536000 and includeSubDomains: trueControls how much referrer information is sent with requests.
/**
* Sets Referrer-Policy header to control referrer information
* @param options - Referrer policy configuration options
* @returns Express middleware function
*/
function referrerPolicy(
options?: ReferrerPolicyOptions
): MiddlewareFunction;
interface ReferrerPolicyOptions {
/** Policy or array of policies (default: ["no-referrer"]) */
policy?: ReferrerPolicyToken | ReferrerPolicyToken[];
}
type ReferrerPolicyToken =
| "no-referrer"
| "no-referrer-when-downgrade"
| "same-origin"
| "origin"
| "strict-origin"
| "origin-when-cross-origin"
| "strict-origin-when-cross-origin"
| "unsafe-url"
| "";Usage Examples:
import { referrerPolicy } from "helmet";
// Default: no-referrer
app.use(referrerPolicy());
// Single policy
app.use(referrerPolicy({
policy: "strict-origin-when-cross-origin"
}));
// Multiple policies (fallback support)
app.use(referrerPolicy({
policy: ["strict-origin-when-cross-origin", "origin-when-cross-origin"]
}));
// No referrer for privacy
app.use(referrerPolicy({
policy: "no-referrer"
}));Policy Values:
HSTS Deployment Strategy:
// Phase 1: Testing (short duration)
app.use(strictTransportSecurity({
maxAge: 300, // 5 minutes
includeSubDomains: false
}));
// Phase 2: Staging (medium duration)
app.use(strictTransportSecurity({
maxAge: 86400, // 1 day
includeSubDomains: true
}));
// Phase 3: Production (long duration)
app.use(strictTransportSecurity({
maxAge: 31536000, // 1 year
includeSubDomains: true,
preload: true
}));High Privacy (least referrer info):
app.use(referrerPolicy({ policy: "no-referrer" }));Balanced (good privacy, maintains some functionality):
app.use(referrerPolicy({ policy: "strict-origin-when-cross-origin" }));Legacy Compatibility (moderate privacy):
app.use(referrerPolicy({ policy: "origin-when-cross-origin" }));app.use(strictTransportSecurity({
maxAge: 63072000, // 2 years
includeSubDomains: true,
preload: true
}));
app.use(referrerPolicy({
policy: "strict-origin-when-cross-origin"
}));app.use(strictTransportSecurity({
maxAge: 31536000, // 1 year
includeSubDomains: true
}));
app.use(referrerPolicy({
policy: "origin-when-cross-origin"
}));app.use(strictTransportSecurity({
maxAge: 3600, // 1 hour
includeSubDomains: false
}));
app.use(referrerPolicy({
policy: "same-origin"
}));