Implementing Security Headers

1. Setting Strict-Transport-Security (HSTS)

DirectiveEffect
max-age=630720002 years HTTPS-only
includeSubDomainsApply to all subdomains
preloadEligible for browser preload list

Example: HSTS header

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

2. Configuring Content-Security-Policy (CSP)

DirectivePurpose
default-srcFallback
script-srcJS sources
style-srcCSS sources
connect-srcfetch/XHR/WS
frame-ancestorsReplaces X-Frame-Options
report-toViolation reporting

Example: Strict CSP

Content-Security-Policy: default-src 'self';
  script-src 'self' 'nonce-rAnd0m';
  style-src 'self' 'unsafe-inline';
  img-src 'self' data: https:;
  connect-src 'self' https://api.example.com;
  frame-ancestors 'none';
  upgrade-insecure-requests;
  report-to csp-endpoint

3. Using X-Frame-Options Header

ValueEffect
DENYNo framing at all
SAMEORIGINSame origin only
ALLOW-FROM DEPRECATEDUse CSP frame-ancestors

4. Setting X-Content-Type-Options

ValueEffect
nosniffDisable MIME sniffing (always set)

5. Configuring Referrer-Policy

ValueBehavior
no-referrerNever send
same-originSame-origin only
strict-origin-when-cross-originOrigin on HTTPS→HTTPS (recommended)
no-referrer-when-downgradeDefault

6. Using Permissions-Policy Header

Example: Lock down browser features

Permissions-Policy: geolocation=(),
  camera=(), microphone=(),
  payment=(self), fullscreen=(self),
  interest-cohort=()

7. Setting X-XSS-Protection

ValueStatus
0Disable (modern recommendation)
1; mode=blockLegacy filter (deprecated by browsers)
Note: Modern browsers ignore this; use CSP instead. Set to 0 to disable buggy legacy filter.

8. Implementing Expect-CT Header

DirectivePurpose
enforceBlock if no SCT
max-age=86400Cache duration
report-uriViolation reports
Note: Header is obsolete in modern browsers (CT is always enforced). Safe to omit on new deployments.

9. Configuring Access-Control Headers

HeaderUse
Access-Control-Allow-OriginAllowed origin
Access-Control-Allow-MethodsAllowed verbs
Access-Control-Allow-HeadersAllowed request headers
Access-Control-Expose-HeadersReadable response headers
Access-Control-Allow-CredentialsCookies allowed
Cross-Origin-Resource-PolicySite isolation
Cross-Origin-Opener-PolicySpectre mitigation
Cross-Origin-Embedder-PolicyRequired for SAB

10. Setting Custom Security Headers

HeaderUse
X-Permitted-Cross-Domain-Policies: noneBlock Flash/PDF policy
X-Download-Options: noopenIE prevent open
X-DNS-Prefetch-Control: offDisable DNS prefetch
Clear-Site-Data: "cache","cookies"On logout