Skip to content

Security Headers

SecurityMiddleware adds security-related HTTP headers to protect against common web vulnerabilities.

// All security headers with defaults
server.use(SecurityMiddleware())
server.use(SecurityMiddleware(SecurityMiddleware.Options(
// Content Security Policy
contentSecurityPolicy = true,
cspDirectives = Map(
"default-src" -> "'self'",
"script-src" -> "'self'",
"img-src" -> "'self' data:",
"style-src" -> "'self' 'unsafe-inline'",
),
// Frame protection
frameguard = true,
frameguardAction = "DENY", // or "SAMEORIGIN"
// HSTS
hsts = true,
hstsMaxAge = 15552000, // 180 days
hstsIncludeSubDomains = true,
hstsPreload = false,
// Cross-Origin policies
crossOriginEmbedderPolicy = true,
crossOriginOpenerPolicy = true,
crossOriginResourcePolicy = true,
// Other protections
noSniff = true,
xssFilter = true,
xssFilterMode = "1; mode=block",
referrerPolicy = true,
referrerPolicyDirective = "no-referrer",
dnsPrefetchControl = true,
ieNoOpen = true,
originAgentCluster = true,
permittedCrossDomainPolicies = "none",
expectCt = true,
expectCtMaxAge = 86400,
expectCtEnforce = true,
)))
OptionDefaultDescription
contentSecurityPolicytrueEnable CSP header
cspDirectivesdefault-src 'self'CSP directive map
frameguardtrueX-Frame-Options
frameguardAction"DENY"DENY or SAMEORIGIN
hststrueStrict-Transport-Security
hstsMaxAge15552000HSTS max-age (seconds)
hstsIncludeSubDomainstrueInclude subdomains in HSTS
hstsPreloadfalseHSTS preload flag
crossOriginEmbedderPolicytrueCOEP header
crossOriginOpenerPolicytrueCOOP header
crossOriginResourcePolicytrueCORP header
noSnifftrueX-Content-Type-Options: nosniff
xssFiltertrueX-XSS-Protection
referrerPolicytrueReferrer-Policy
referrerPolicyDirective"no-referrer"Referrer policy value
dnsPrefetchControltrueX-DNS-Prefetch-Control
expectCttrueExpect-CT header

A minimal set of important security headers:

server.use(SecurityMiddleware.essential())

Security headers optimized for JSON API servers:

server.use(SecurityMiddleware.api())

When fully enabled, the following headers are set:

  • Content-Security-Policy
  • Cross-Origin-Embedder-Policy: require-corp
  • Cross-Origin-Opener-Policy: same-origin
  • Cross-Origin-Resource-Policy: same-origin
  • Strict-Transport-Security
  • X-Frame-Options
  • X-Content-Type-Options: nosniff
  • X-XSS-Protection
  • Referrer-Policy
  • X-DNS-Prefetch-Control: off
  • X-Download-Options: noopen
  • Origin-Agent-Cluster: ?1
  • X-Permitted-Cross-Domain-Policies: none
  • Expect-CT